从字符串常量到"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!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*
进行类型强制转换来避免警告,但更好的方法是重写代码以避免类型强制转换。虽然它可以工作并解决许多令人头痛的问题,但如果您键入错误的内容,则可能非常危险。
相关文章:
- 将无符号char*转换为std::istream*C++
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 使用char类型将decimal转换为string,将string转换为decimal
- 如何在对<char>C++程序进行逆向工程的同时将 std::basic_string 转换为 Rust 可读值?
- 将函数参数"const char*"转换为"std::string_view"是
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 如何在不强制转换每个参数的情况下删除初始值设定项列表中从 int 到 char 的缩小转换?
- C ++如何在使用"tolower"时将char转换为int
- 有没有办法在C++的赋值中将"char**"转换为"double"?
- 如何使用多次 memcpy 转换回 std::vector<unsigned char>?
- 将"uint8_t"(从套接字读取)隐式转换为"char"安全吗
- JavaCPP 错误:无法将参数"1"的"char*"转换为"Abc*
- 将传入的网络"char*"数据转换为"uint8_t"并返回的安全方法是什么?
- 转换char*时的值不同
- Boost Python 不会自动转换 char* 数据成员
- 除了转换char*之外,还有更好的方法来获得一个变量值吗?
- 如何跨平台转换char*到long long(64位)
- 用atof转换char数组中的浮点数
- C转换char[]为时间戳;