[英]Weird Error, error: invalid conversion from ‘const char*’ to ‘char’ [-fpermissive]
[英]Error : invalid conversion from 'const char*' to 'char*' [-fpermissive]
首先,這不是重復的,因為之前提出了相同的錯誤問題,但在不同的上下文中
代碼
#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;
}
Output
[Error] invalid conversion from 'const char*' to 'char*' [-fpermissive]
為什么會出現這樣的錯誤?
如果我用 char *s1 替換const char *s1
char *s1
編譯正常。 但我認為這個const
只說 s1 指向常量字符串意味着我們不能修改它指向的那個字符串。 這並不意味着s1
是常數 ptr 。 請對此有所了解。
為什么會出現這樣的錯誤?
查看strcpy
的聲明:
char* strcpy( char* dest, const char* src );
特別注意第一個參數。 並且非常特別注意第一個參數的類型: char*
。 它不是const char*
。
現在,查看您傳遞的參數的類型。
const char *s1;
這不是char*
。 它是const char*
。 您不能將const char*
傳遞給接受char*
的 function 因為前者不能轉換為后者,如診斷消息所述。
但我認為這個 const 只說 s1 指向常量字符串意味着我們不能修改它指向的那個字符串。
這正是const bchar*
的意思。 那么,當你知道它不能被修改時,你如何期望strcpy
去修改被指向的字符串的內容呢? 從技術上講,在這種情況下,指向的字符串不是 const,它只是由指向 const 的指針指向
正如你所說, const char *s1;
表示s1
指向的字符串是不可修改的。
另一方面, strcpy(s1,s2);
將修改s1
指向的字符串。
這違反了“ s1
指向的字符串不可修改”的條件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.