将字符存储在使用字符串初始化的char指针中

时间:2015-11-27 06:00:52

标签: c++

我尝试运行以下程序:

#include <iostream>
using namespace std;

int main(){
    char *x = "Linux";
    *x = 'T';
    cout<<"value: "<<*x<<endl;
}

据我说,它应该在x指向的位置存储'T'。但相反,它给出了分段错误。但是当我这样做的时候:

char *x;
*x = 'T';

输出符合预期。有人可以解释这种行为吗?

2 个答案:

答案 0 :(得分:1)

不推荐使用指向字符串文字的非const char指针,不应在新代码中使用。修改字符串文字是未定义的行为。您的第二个示例取消引用未初始化的指针,该指针也是未定义的行为。这意味着它有时可以显示来工作。

答案 1 :(得分:0)

字符串文字是const char* s,而不是char* s。

你的两个例子都是未定义的行为;第二个看似工作只是偶然发生。