簡體   English   中英

錯誤:從 'const char*' 到 'char*' 的無效轉換 [-fpermissive]

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

首先,這不是重復的,因為之前提出了相同的錯誤問題,但在不同的上下文中

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

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM