从字符串常量到"char*"的折旧转换

Depreciated conversion from string constant to 'char*'

本文关键字:转换 char 字符串 常量      更新时间:2023-10-16

我希望有人能帮助我。我正在将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!nn");
          exit(-1);
    }
    ...etc.

这是编译器告诉我错误发生的地方:

File = FileOpen(FNAME); 

我只是不明白怎么了…

编译器告诉我去看的地方甚至没有一个字符串或字符与它相关联??

现在我知道这个错误以前见过,但我的问题是特定于我的代码

问题是您正在尝试将字符串文字(类型为const char[])转换为char*

编译器告诉我要查找的地方甚至没有与之关联的字符串或字符??

是的,它在文件的顶部:

#define FNAME "database.dat"

c++标准n3337§2.14.5/1

字符串文字

字符串字面值是一个字符序列(定义见2.14.3)用双引号括起来,可以用R, u8, u8R, u, uR,U,你,我,或LR,如"…"R"(…)",与"…",u8R"(…)",你"……"你"*̃(…)*̃",你"…",你"zzz(…)打鼾声,L"…",或LR(…)",分别。

您可以通过转换为char*:

来避免此警告。
File = FileOpen( (char*)FNAME);

更好地修改FileOpen以接受const char*。当您不打算修改字符串时,这将更安全,更合适。

正如@lizusek所说,您可以通过对char*进行类型强制转换来避免警告,但更好的方法是重写代码以避免类型强制转换。虽然它可以工作并解决许多令人头痛的问题,但如果您键入错误的内容,则可能非常危险。