为什么第一个版本会导致程序崩溃,而第二个版本不会呢?它们不是同一件事吗?
指针表示法
char *shift = "mondo";
shift[3] = shift[2];
数组表示法
char shift[] = {'m', 'o', 'n', 'd', 'o', '\0'};
shift[3] = shift[2];
最小工作示例
int main( void )
{
char *shift = "mondo";
shift[3] = shift[2];
char shift[] = {'m', 'o', 'n', 'd', 'o', '\0'};
shift[3] = shift[2];
return 0;
}
const
? - Nerva"mondo"
这样的字符串字面量是以一种可写或不可写的方式分配的,这取决于平台。在您的情况下,它是不可写的,因此会出现错误。通常情况下,这种行为是未定义的;它可能工作,可能崩溃,也可能做其他事情。 - John Bode