为什么我以后不能更改char数组?

时间:2013-07-02 07:03:24

标签: c string

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

7 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:3)

由于无法修改数组的名称,只需使用strcpy

strcpy(myArray, "World");

答案 3 :(得分:2)

myArray是您无法修改的数组的名称。为其分配值是违法的。 C中的数组是不可修改的lvalues。 C中没有可以修改数组本身的操作(只有单个元素可以修改)。

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

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

char *ptr = "Hello";

如果你想改变

 ptr = strdup("World");

注:

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

答案 4 :(得分:2)

你不能分配给一个数组(除非在声明中初始化它。相反,你必须复制到它。你使用strcpy

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

答案 5 :(得分:2)

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

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

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

char myArray[6] = "Hello";
myArray[0] = 'W';
strcpy(myArray, "World");

答案 6 :(得分:2)

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