4
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 修饰符。

4

7 回答 7

6

当您编写时,char myArray[6]="Hello";您在堆栈上分配 6 chars(包括一个空终止符)。

是的,您可以更改单个元素;例如 myArray[4] = '\0' 会将您的字符串转换为“Hell”(就 C 库字符串函数而言),但您不能重新定义数组本身,因为这会破坏堆栈。

请注意,这[const] char* myArray = "Hello";是一个完全不同的野兽:这是只读内存,对该字符串的任何更改都是未定义的行为

于 2013-07-02T07:06:12.353 回答
4

数组是不可修改的左值。所以你不能修改它。
如果要修改数组的内容,请使用strcpy.

于 2013-07-02T07:06:00.273 回答
3

因为不能修改数组的名称,所以只需使用strcpy

strcpy(myArray, "World");
于 2013-07-02T07:07:03.407 回答
2

那么myArray是您无法修改的数组的名称。给它赋值是非法的。C 中的数组是不可修改的lvalues。C 中没有可以修改数组本身的操作(只能修改单个元素)。

myArray的大小为 6,因此在 期间必须小心strcpystrcpy(myArray,"World")因为如果源的字符串长度大于目标的长度(在这种情况下为 6),则会导致溢出。

C 中的数组是不可修改的左值。C 中没有可以修改数组本身的操作(只能修改单个元素)。一种可能且安全的方法是

char *ptr = "Hello";

如果你想改变

 ptr = strdup("World");

笔记:

确保你free(ptr)在最后,否则会导致内存泄漏。

于 2013-07-02T07:04:34.193 回答
2

您不能在 C 中分配裸数组。但是您可以分配指针:

char const *myPtr = "Hello";
myPtr = "World";

或者您可以分配给数组的元素:

char myArray[6] = "Hello";
myArray[0] = 'W';
strcpy(myArray, "World");
于 2013-07-02T07:07:01.107 回答
2

除了初始化之外,您不能将字符串分配给 C 中的变量。使用 strcpy() 函数更改 C 中字符串变量的值。

于 2013-07-02T07:08:12.423 回答
2

您不能分配给数组(除非在其声明中对其进行初始化。相反,您必须复制到它。您可以使用strcpy.

但要小心,不要将超过五个字符复制到数组中,因为这是它可以包含的最长字符串。在这种情况下使用strncpy可能很危险,因为'\0'如果源字符串太长,它可能不会添加终止字符。

于 2013-07-02T07:05:43.343 回答