如何在 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"
好像没用。
【问题讨论】:
@Anguslileichar **s;
这不是二维数组,这是指向指针的指针。
总猜测,std::vector<std::string>>
你永远不应该。您应该使用字符串向量。
如果我不想使用vector怎么办,有什么方法可以在类Tool中声明s。谢谢大家!
当你说你不想使用向量时,你有什么特别的理由不想使用吗?与指向字符串数组的指针数组相比,在向量中管理字符串要容易得多,因此除非您有非常好的理由不使用向量,否则您应该这样做。
【参考方案1】:
虽然您可以使用std::vector<std::string>
,但我觉得直接回答您的问题对您更有利。
char** s
是指向指针的指针;可能是指向指针数组中第一个指针的指针。
char* s1[]
是一个指向 const 数据的指针数组(实际上应该是 const
)。
如果您希望s
与s1
类似地工作,您首先需要分配指针数组,这就是std::vector
被其他人推荐的原因。你可以用new
自己做,但你必须在某个时候释放分配的内存。直接使用new
容易泄露。 std::vector
将在对象被破坏时释放其分配的内存。如果你愿意,你也可以在你的析构函数中调用delete[]
。
当您的数组被分配后,您需要将std::copy
中的指针数组s1
指向s
中的指针数组。这不是一个单独的分配操作。
【讨论】:
s 似乎很难像 s1 一样工作。现在,我知道了 s 和 s1 之间的区别,非常感谢大家! 这就是其他人推荐 std::vector<:string> 的原因 :)以上是关于如何在 C++ 类中初始化二维字符指针的主要内容,如果未能解决你的问题,请参考以下文章