Error : invalid conversion from 'const char*' to 'char*' [-fpermissive]

Error : invalid conversion from 'const char*' to 'char*' [-fpermissive]

first of all this is not duplicate one because same error Question asked before but in different context

1

代码

#include<iostream>
#include<cstring>

int main()
{
    const char *s1;
    const char *s2="bonapart";
    
    s1=new char[strlen(s2)+1];
    strcpy(s1,s2);
    
    std::cout<<s1;
}

输出

[Error] invalid conversion from 'const char*' to 'char*' [-fpermissive]

为什么会出现这样的错误?

如果我将 const char *s1 替换为 char *s1 编译正常。但我认为这个 const 只是说 s1 指向 constant string 意味着我们不能修改它指向的那个字符串。这并不意味着 s1constant ptr。请说明一下。

如你所说,const char *s1;表示s1指向的字符串不可修改

另一方面,strcpy(s1,s2);会修改s1指向的字符串。

这违反了“s1指向的字符串不可修改”的条件。

Why such error ?

strcpy的声明:

char* strcpy( char* dest, const char* src );

特别注意第一个参数。并且非常特别注意第一个参数的类型:char*。这不是 const char*.

现在,看看您传递的参数类型。

const char *s1;

不是char*。是 const char*。您不能将 const char* 传递给接受 char* 的函数,因为前者不能转换为后者,如诊断消息所述。

But I think this const only saying that s1 is pointing to constant string means we can't modify that string whom it is pointing.

这正是 const bchar* 的意思。那么,当你知道strcpy指向的字符串是不可修改的内容时,你怎么指望去修改它呢? 从技术上讲,在这种情况下,指向的字符串不是常量,它只是由指向常量的指针指向