繁体   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