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修饰符。
答案 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中的字符串变量值。