参见英文答案 >
getting segmentation fault in a small c program3个
为什么第一个版本会导致程序崩溃,而第二个版本却没有?他们不是一回事吗?
为什么第一个版本会导致程序崩溃,而第二个版本却没有?他们不是一回事吗?
指针表示法
char *shift = "mondo"; shift[3] = shift[2];
数组表示法
char shift[] = {'m','o','n','d','\0'}; shift[3] = shift[2];
MWE
int main( void ) { char *shift = "mondo"; shift[3] = shift[2]; char shift[] = {'m','\0'}; shift[3] = shift[2]; return 0; }
解决方法
没有!这是C中的重要问题之一.首先,您创建一个指向内存只读部分的指针,即您无法更改它,只能读取它.第二个,创建一个字符数组,即连续字符的内存的一部分,您可以同时具有读取和写入访问权限,这意味着您可以读取和更改数组的值.