簡體   English   中英

從字符串常量到'char *'的折舊轉換

[英]Depreciated conversion from string constant to 'char*'

我希望有一個人可以幫助我。 我正在將C語言程序轉換為C ++,以便輕松使用字符串,但是當我進行編譯時,出現此錯誤:

inventory.cpp:225: warning: depreciated conversion from string constant to 'char*'

這是有問題的代碼所在的位置:

#define FNAME "database.dat"


// test data struct
struct t_Record
{
    int number;
    char word[100];
    //String word[];
} Record;

int main (void)
{
    int Rec = 0; // record number
    FILE *File;

    srand(time(NULL));

    File = FileOpen(FNAME); 
    if (!File)
    {
          printf("Error hommie!\n\n");
          exit(-1);
    }

    ...etc.

這是編譯器告訴我發生錯誤的地方:

File = FileOpen(FNAME); 

我只是看不出有什么問題...

編譯器告訴我的地方甚至沒有與之關聯的字符串或char?

現在,我了解到以前已經看到過此錯誤,但是我的問題特定於我的代碼。

問題是您正在嘗試將字符串文字 (類型為const char[] )轉換為char*

編譯器告訴我的地方甚至沒有與之關聯的字符串或char?

是的,它位於文件的頂部:

#define FNAME "database.dat"

C ++標准n3337§2.14.5 / 1

字符串文字

字符串文字是由雙引號括起來的字符序列(如2.14.3中所定義),可以選擇在其前加上R,u8,u8R,u,uR,U,UR,L或LR,如“ ...” ,R“(...)”,u8“ ...”,u8R“(...)”,u“ ...”,uR“ * ̃(...)* ̃”,U“ .. 。“,UR” zzz(...)zzz“,L” ...“或LR”(...)“。

您可以通過強制轉換為char*來避免該警告:

File = FileOpen( (char*)FNAME);

甚至更好地修改FileOpen以接受const char* 因為您不打算修改字符串,這將更安全且恰到好處。

正如@lizusek所說,可以通過將類型強制轉換為char*來避免警告,但更好的方法是重寫代碼以避免類型強制轉換。 盡管它可以解決很多麻煩,但如果鍵入錯誤的內容,可能會非常危險。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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