很明显,初始化一个char数组,如
char* string = "foobar";
将使其不可变。另一方面,初始化一个char数组,如
char string[] = "foobar";
将使其变得可变。
对指向char数组的指针进行可变初始化的最佳方法是什么?
// member char arrays are immutable
char* arr[] = {"foo", "bar"};
答案 0 :(得分:3)
假设您可以使用C99功能,复合文字可以解决这个问题:
char *arr[] = { (char[]){"foo"}, (char[]){"bar"} };
答案 1 :(得分:0)
一种选择是猜测数组中字符串的最大大小,并使用:
char arr[][SIZE] = {"foo", "bar"};
其中SIZE
将替换为数字。
char arr[][4] = {"foo", "bar"};
在给出字符串的情况下会起作用,但如果你使用它会赢得:
char arr[][4] = {"foo", "fubar"};
编译这样的行时,gcc会输出以下警告:
警告:字符数组的初始化字符串太长[默认情况下启用] char arr [] [4] = {" foo"," fubar"};
如果您使用的是其他编译器,则可能不会抱怨。请注意。