从字符串常量转换为' char *'

时间:2014-03-28 21:53:17

标签: c++ c string compiler-construction 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); 

我只是看不出有什么问题......

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

现在我明白此错误已经出现过,但我的问题是针对我的代码的。

2 个答案:

答案 0 :(得分:3)

问题在于您尝试将string literal(类型为const 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*。这样会更安全,更正确,因为您不打算修改字符串。

答案 1 :(得分:0)

正如@lizusek所说,您可以通过类型转换到char*来避免警告,但更好的方法是重写代码以避免类型转换。虽然它可以起作用并解决很多麻烦,但如果你输入错误的东西,这可能会非常危险。