我尝试运行以下程序:
#include <iostream>
using namespace std;
int main(){
char *x = "Linux";
*x = 'T';
cout<<"value: "<<*x<<endl;
}
据我说,它应该在x指向的位置存储'T'。但相反,它给出了分段错误。但是当我这样做的时候:
char *x;
*x = 'T';
输出符合预期。有人可以解释这种行为吗?
答案 0 :(得分:1)
不推荐使用指向字符串文字的非const char指针,不应在新代码中使用。修改字符串文字是未定义的行为。您的第二个示例取消引用未初始化的指针,该指针也是未定义的行为。这意味着它有时可以显示来工作。
答案 1 :(得分:0)
字符串文字是const char*
s,而不是char*
s。
你的两个例子都是未定义的行为;第二个看似工作只是偶然发生。