如何在 C++ 类中初始化二维字符指针

Posted

技术标签:

【中文标题】如何在 C++ 类中初始化二维字符指针【英文标题】:How could I initialize a two dimensional char pointer in C++ class 【发布时间】:2015-06-06 03:07:23 【问题描述】:
class Tool

public:
    Tool();
    ~Tool();

private:
    char **s;
;

char *s1[]="hello","world";

如何初始化s 并使其与s1 相同?

s="hello","world"

好像没用。

【问题讨论】:

@Anguslilei char **s; 这不是二维数组,这是指向指针的指针。 总猜测,std::vector<std::string>> 你永远不应该。您应该使用字符串向量。 如果我不想使用vector怎么办,有什么方法可以在类Tool中声明s。谢谢大家! 当你说你不想使用向量时,你有什么特别的理由不想使用吗?与指向字符串数组的指针数组相比,在向量中管理字符串要容易得多,因此除非您有非常好的理由不使用向量,否则您应该这样做。 【参考方案1】:

虽然您可以使用std::vector<std::string>,但我觉得直接回答您的问题对您更有利。

char** s是指向指针的指针;可能是指向指针数组中第一个指针的指针。

char* s1[] 是一个指向 const 数据的指针数组(实际上应该是 const)。

如果您希望ss1 类似地工作,您首先需要分配指针数组,这就是std::vector 被其他人推荐的原因。你可以用new 自己做,但你必须在某个时候释放分配的内存。直接使用new 容易泄露。 std::vector 将在对象被破坏时释放其分配的内存。如果你愿意,你也可以在你的析构函数中调用delete[]

当您的数组被分配后,您需要将std::copy 中的指针数组s1 指向s 中的指针数组。这不是一个单独的分配操作。

【讨论】:

s 似乎很难像 s1 一样工作。现在,我知道了 s 和 s1 之间的区别,非常感谢大家! 这就是其他人推荐 std::vector<:string> 的原因 :)

以上是关于如何在 C++ 类中初始化二维字符指针的主要内容,如果未能解决你的问题,请参考以下文章

C语言中如何将二维字符数组作为函数参数引用传递

如何在 C++ 中初始化指向动态二维数组的指针 [关闭]

C-二维数组, 字符串, 指针

在 C++ 中使用指针初始化 char 数组或字符串

在类中初始化NSString *指针的方法

C++二维数组(指针)做参数