Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将指向字符数组的指针初始化为可变的最好方法是什么?_C_Arrays_Char - Fatal编程技术网

C 将指向字符数组的指针初始化为可变的最好方法是什么?

C 将指向字符数组的指针初始化为可变的最好方法是什么?,c,arrays,char,C,Arrays,Char,很明显,初始化char数组 char* string = "foobar"; 将使其不可更改。另一方面,初始化char数组,如 char string[] = "foobar"; 将使其可变 对指向字符数组的指针进行可变初始化的最佳方法是什么 // member char arrays are immutable char* arr[] = {"foo", "bar"}; 假设您有C99功能可供使用,复合文字就可以做到这一点: char *arr[] = { (char[]){"foo"}

很明显,初始化char数组

char* string = "foobar";
将使其不可更改。另一方面,初始化char数组,如

char string[] = "foobar";
将使其可变

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

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

假设您有C99功能可供使用,复合文字就可以做到这一点:

char *arr[] = { (char[]){"foo"}, (char[]){"bar"} };

一个选项是猜测数组中字符串的最大大小,并使用:

char arr[][SIZE] = {"foo", "bar"};
其中,
大小
将被数字替换

char arr[][4] = {"foo", "bar"};
在给定字符串的情况下可以工作,但如果使用:

char arr[][4] = {"foo", "fubar"};
编译该行时,gcc打印以下警告:

警告:字符数组的初始值设定项字符串太长[默认情况下已启用] char arr[][4]={“foo”,“fubar”}


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

轻微更正:它在所有系统上都是不可变的。有些系统无法捕获未定义的行为并导致崩溃,但如果不这样做,则可能会发生更糟糕的事情:例如,两个具有相同内容的字符串文字,或者其中一个是另一个的尾部,可以共享相同的内存,因此尝试修改一个会导致程序在另一个中看到修改!