初始化字符*[]

Dog*_*Dog 25 c++ arrays cstring

问题在标题中,如何初始化char*[]并在C++中给它赋值,谢谢.

Ste*_*oss 19

虽然你可能知道,char*[]是一个指向字符的指针数组,我猜你想要存储一些字符串.初始化这样的指针数组很简单:

char ** array = new char *[SIZE];
Run Code Online (Sandbox Code Playgroud)

...或者如果你在堆栈上分配内存:

char * array[SIZE];
Run Code Online (Sandbox Code Playgroud)

然后,您可能希望使用循环填充数组,例如:

for(unsigned int i = 0; i < SIZE; i++){
    // str is likely to be an array of characters
    array[i] = str;
}
Run Code Online (Sandbox Code Playgroud)

如本答案的评论中所述,如果您使用new(动态分配)分配数组,请记住删除您的数组:

delete[] array;
Run Code Online (Sandbox Code Playgroud)


Joh*_*don 11

根据您要初始化的内容,您可以执行以下任何操作:

char mystr[] = {'h','i',0};
char * myotherstring = "my other string";
char * mythirdstring = "goodbye";

char * myarr[] = {0};
char * myarr[] = {&mystr, myotherstring};
char * myarr[10];
char * myarr[10] = {0};
char * myarr[10] = {&mystr, myotherstring, mythirdstring, 0};
Run Code Online (Sandbox Code Playgroud)

等等


Max*_*keh 7

像这样:

char* my_c_string;
char* x[] = { "hello", "world", 0, my_c_string };
Run Code Online (Sandbox Code Playgroud)


小智 7

有一点我注意到你必须小心...... C和C++在初始化语法方面有所分歧.正如Mark B.上面指出的那样,你可以初始化一个char指针数组:

const char* messages[] =
{
    "Beginning",
    "Working",
    "Finishing",
    "Done"
};
Run Code Online (Sandbox Code Playgroud)

但在C++中.正如kriss指出的那样,这会让你发出一个关于从字符串到char*的弃用转换的警告.那是因为C++假设你想要为字符串使用字符串; - }.

这并非总是如此.所以当你真的想要初始化一个char*数组时,我发现我必须这样做:

const char* messages[] =
{
    (char*)("Beginning"),
    (char*)("Working"),
    (char*)("Finishing"),
    (char*)("Done")
};
Run Code Online (Sandbox Code Playgroud)

编译器现在很开心......