为什么char*s ="你好"; 被允许?

Don*_*alo 5 c pointers

char *s = "hello";
Run Code Online (Sandbox Code Playgroud)

上面的代码在程序的只读部分分配了6个字节(我忘记了部分的名称)来存储字符串hello.然后,s初始化为指向字符串的第一个字符hello.修改字符串"hello"是未定义的行为.此外,"hello"它本身也是不变的.该程序无权更改只读部分.

我正在使用MS VC++ 2010 Express.我的问题是,为什么编译器允许s(哪一个char *)指向常量字符串?不应该有编译器错误?编译器不应该强迫我们使用const char *s = "hello";而不是char *s = "hello";

谢谢.

Pas*_*uoq 5

在C中,"你好"有类型char[].这不是C++.看到这个问题.

  • 为了避免混淆,它的类型为char [N],其中N是文字+1的长度. (2认同)