C 将指向字符数组的指针初始化为可变的最好方法是什么?
很明显,初始化char数组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* 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”}
如果您使用的是不同的编译器,它可能不会抱怨。请注意。轻微更正:它在所有系统上都是不可变的。有些系统无法捕获未定义的行为并导致崩溃,但如果不这样做,则可能会发生更糟糕的事情:例如,两个具有相同内容的字符串文字,或者其中一个是另一个的尾部,可以共享相同的内存,因此尝试修改一个会导致程序在另一个中看到修改!