char myArray[6]="Hello"; //declaring and initializing char array
printf("\n%s", myArray); //prints Hello
myArray="World"; //Compiler says"Error expression must a modifiable lvalue
为什么我以后不能更改 myArray?我没有将它声明为 const 修饰符。
当您编写时,char myArray[6]="Hello";
您在堆栈上分配 6 char
s(包括一个空终止符)。
是的,您可以更改单个元素;例如 myArray[4] = '\0' 会将您的字符串转换为“Hell”(就 C 库字符串函数而言),但您不能重新定义数组本身,因为这会破坏堆栈。
请注意,这[const] char* myArray = "Hello";
是一个完全不同的野兽:这是只读内存,对该字符串的任何更改都是未定义的行为。
数组是不可修改的左值。所以你不能修改它。
如果要修改数组的内容,请使用strcpy
.
因为不能修改数组的名称,所以只需使用strcpy
:
strcpy(myArray, "World");
那么myArray
是您无法修改的数组的名称。给它赋值是非法的。C 中的数组是不可修改的lvalues
。C 中没有可以修改数组本身的操作(只能修改单个元素)。
井myArray
的大小为 6,因此在 期间必须小心strcpy
。
strcpy(myArray,"World")
因为如果源的字符串长度大于目标的长度(在这种情况下为 6),则会导致溢出。
C 中的数组是不可修改的左值。C 中没有可以修改数组本身的操作(只能修改单个元素)。一种可能且安全的方法是
char *ptr = "Hello";
如果你想改变
ptr = strdup("World");
笔记:
确保你free(ptr)
在最后,否则会导致内存泄漏。
您不能在 C 中分配裸数组。但是您可以分配指针:
char const *myPtr = "Hello";
myPtr = "World";
或者您可以分配给数组的元素:
char myArray[6] = "Hello";
myArray[0] = 'W';
strcpy(myArray, "World");
除了初始化之外,您不能将字符串分配给 C 中的变量。使用 strcpy() 函数更改 C 中字符串变量的值。
您不能分配给数组(除非在其声明中对其进行初始化。相反,您必须复制到它。您可以使用strcpy
.
但要小心,不要将超过五个字符复制到数组中,因为这是它可以包含的最长字符串。在这种情况下使用strncpy
可能很危险,因为'\0'
如果源字符串太长,它可能不会添加终止字符。