我写了这个简短的程序
int main(){
char * c = "abcd";
c[1] = '\0';
cout << c << endl;
}
Run Code Online (Sandbox Code Playgroud)
并且它不起作用...实际上它编译程序但在运行时发生错误...为什么?我认为它将打印一个"a",因为"字符串"现在看起来像这样:"a0cd"所以在零之后它应该检测到字符串的结尾,对吧?那问题出在哪里?
谢谢!
你不能修改那样的字符串文字.
试试这个:
int main(){
char c[] = "abcd";
c[1] = '\0';
cout << c << endl;
}
Run Code Online (Sandbox Code Playgroud)
这背后的原因是字符串文字存储在全局内存中(通常在只读段中).修改它们是未定义的行为.但是,如果将它初始化为数组char c[] = "abcd",它将在堆栈中(而不是全局内存),因此您可以自由地修改它.