问题在标题中,如何初始化char * []并在C ++中给它赋值,谢谢。
答案 0 :(得分:19)
虽然你可能知道,但char * []是一个指向字符的指针数组,我猜你想要存储一些字符串。初始化这样的指针数组很简单:
char ** array = new char *[SIZE];
...或者如果你在堆栈上分配内存:
char * array[SIZE];
然后,您可能希望使用循环填充数组,例如:
for(unsigned int i = 0; i < SIZE; i++){
// str is likely to be an array of characters
array[i] = str;
}
如本答案的评论中所述,如果您使用new(动态分配)分配数组,请记住删除您的数组:
delete[] array;
答案 1 :(得分: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};
等。等
答案 2 :(得分:7)
像这样:
char* my_c_string;
char* x[] = { "hello", "world", 0, my_c_string };
答案 3 :(得分:7)
有一点我注意到你必须小心...... C和C ++在初始化语法方面有所分歧。正如Mark B.上面指出的那样,你可以初始化一个char指针数组:
const char* messages[] =
{
"Beginning",
"Working",
"Finishing",
"Done"
};
但是在C ++中。正如kriss指出的那样,这会让你发出一个关于从字符串到char *的弃用转换的警告。那是因为C ++假设你想要为字符串使用字符串; - }。
这并非总是如此。所以当你真的想要初始化一个char *数组时,我发现我必须这样做:
const char* messages[] =
{
(char*)("Beginning"),
(char*)("Working"),
(char*)("Finishing"),
(char*)("Done")
};
编译器现在很高兴......
答案 4 :(得分:2)
就像那样:
char p1 = 'A';
char p2 = 'B';
char * t[] = {&p1, &p2};
std::cout << "p1=" << *t[0] << ", p2=" << *t[1] << std::endl;
但不知怎的,我相信这不是真正问题的答案......
我想在编译时定义一个C字符串数组,你应该使用一个const char *数组:
const char * t2[] = {"string1", "string2"};
std::cout << "p1=" << t2[0] << ", p2=" << t2[1] << std::endl;
没有const我的编译器会说: 警告:已弃用从字符串常量转换为'char *'
答案 5 :(得分:2)
如果你真的只想要一个C风格的常量字符串数组(例如索引消息):
const char* messages[] =
{
"Beginning",
"Working",
"Finishing",
"Done"
};
但是,如果您尝试维护运行时变量字符串的容器,则使用C ++工具std::vector<std::string>
将更容易跟踪所有内存操作。
std::vector<std::string> strings;
std::string my_string("Hello, world.")
strings.push_back("String1");
strings.push_back(my_string);
答案 6 :(得分:1)
就像任何其他阵列一样:
char *a, *b, *c;
char* cs[] = {a, b, c}; // initialized
cs[0] = b; // assignment
答案 7 :(得分:1)
#include <iostream>
int main(int argc, char *argv[])
{
char **strings = new char *[2]; // create an array of two character pointers
strings[0] = "hello"; // set the first pointer in the array to "hello"
strings[1] = "world"; // set the second pointer in the array to "world"
// loop through the array and print whatever it points to out with a space
// after it
for (int i = 0; i < 2; ++i) {
std::cout << strings[i] << " ";
}
std::cout << std::endl;
return 0;
}