char *a= "ABC";
"ABC"
字符串属于const char*
类型。如何将其地址分配给char*
指针?
不应该是一个错误吗?
答案 0 :(得分:3)
char *a = "ABC";
"ABC"
在C中的类型为char [4]
,而在C ++中的类型为const char [4]
。
答案 1 :(得分:2)
C中的字符串文字具有非const数组的类型。从C标准(6.4.5字符串文字):
然后使用多字节字符序列初始化数组 静态存储的持续时间和长度恰好足以容纳 序列。对于字符串文字,数组元素具有 键入char ,并使用多字节字符序列的各个字节进行初始化。
尽管C中的字符串文字具有非const数组的类型,但它们不应被修改。
如果程序试图修改这样的数组,则行为是 未定义。
在这方面考虑例如标准C函数strchr
的声明:)
char *
strchr(const char *
s,int c);
该函数返回一个指向同一字符串的指针,该字符串与使用限定符const。
定义的参数相同在C ++中,字符串文字具有常量字符数组的类型。
来自C ++标准
8也引用普通的字符串文字和UTF-8字符串文字 作为窄字符串文字。窄字符串文字具有类型 “n const char数组”,其中n是下面定义的字符串大小,并且具有静态存储持续时间(3.7)。