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 意味着我们不能修改它指向的那个字符串。这并不意味着 s1
是 constant 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
指向的字符串是不可修改的内容时,你怎么指望去修改它呢? 从技术上讲,在这种情况下,指向的字符串不是常量,它只是由指向常量的指针指向
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 意味着我们不能修改它指向的那个字符串。这并不意味着 s1
是 constant 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
指向的字符串是不可修改的内容时,你怎么指望去修改它呢? 从技术上讲,在这种情况下,指向的字符串不是常量,它只是由指向常量的指针指向