将指向char数组的指针初始化为可变的最佳方法是什么?

时间:2014-07-12 01:55:13

标签: c arrays char

很明显,初始化一个char数组,如

char* string = "foobar";

将使其不可变。另一方面,初始化一个char数组,如

char string[] = "foobar";

将使其变得可变。

对指向char数组的指针进行可变初始化的最佳方法是什么?

// member char arrays are immutable
char* arr[] = {"foo", "bar"};

2 个答案:

答案 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"};

如果您使用的是其他编译器,则可能不会抱怨。请注意。