C++中C风格字符串的使用
char *p = "abc"; p[1] = 'x'; cout << p[1] << endl; return 0;
以上代码会产生运行时错误,去掉p[1] = 'x';或者把p定义改成char p[] = "abc"就能正常运行。
如
char *p = "abc"; cout << p[1] << endl; return 0;//或char p[] = "abc"; p[1] = 'x'; cout << p[1] << endl; return 0;
这是因为char *p = "abc"把"abc"放在常量区,而char p[] = "abc"把"abc"放在变量区。
怎样让编译器识别这个错误?char *p = "abc"是C语言的遗留风格,建议使用字符字面值定义字符指针时总是在前面加上const。如下定义:
const char *p = "abc";
这样即使后面有要修改其值的语句编译器也会报错而不是产生运行时错误。
-----------------------转自 AngelsThanatos