为什么允许在C ++中将字符串文字赋值给char *类型的指针

时间:2017-10-27 14:50:17

标签: c++ string pointers compiler-errors

使用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;
}

1 个答案:

答案 0 :(得分:0)

编辑:答案已更新,其中包含来自Story Teller评论的信息。

在过去,const并不存在,人们总是写char* p = "abc"之类的东西。只要没有做p[0] = 'z'这样的事情,他们的计划就会奏效。为了与这些代码保持兼容,如果你不要求编译器是超严格的,一些编译器允许将字符串文字分配给非const指针。如果您利用此功能,仍然不应该实际修改字符串。