使用visual studio,我声明了一个类型为char *
的指针,并为其指定了一个字符串文字。然后我将鼠标悬停在字符串文字上,并显示其类型:(const char [4])"abc"
。
这是如何允许的?它在没有警告或错误的情况下进行编译,同时为指针分配类型const char []
的数组失败,原因很明显,并显示错误消息:
“const char *”类型的值不能分配给“char *”
类型的实体
那么,为什么允许使用字符串文字?
int main(void)
{
char *p = "abc"; // no error here
const char str[] = "abc";
//p = str; This line generates an error
return 0;
}
答案 0 :(得分:0)
编辑:答案已更新,其中包含来自Story Teller评论的信息。
在过去,const
并不存在,人们总是写char* p = "abc"
之类的东西。只要没有做p[0] = 'z'
这样的事情,他们的计划就会奏效。为了与这些代码保持兼容,如果你不要求编译器是超严格的,一些编译器允许将字符串文字分配给非const指针。如果您利用此功能,仍然不应该实际修改字符串。