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