mah*_*ood 2 c string char nvcc
我想从命令行获取文件名或为其设置默认名称.所以,以前我用过
static char *fName;
if (argc == 2 ) {
fName = argv[1];
}
else {
fName = "default_file.txt";
}
Run Code Online (Sandbox Code Playgroud)
但是对于else,我得到了warning: conversion from a string literal to "char *" is deprecated.如果我尝试这样的事情:
static char fName [30] = "default_file.txt";
if (argc == 2 ) {
fName = argv[1]; //error
}
Run Code Online (Sandbox Code Playgroud)
现在,我明白了error: expression must be a modifiable lvalue.那么,我该如何解决这个问题呢?
警告:不建议使用从字符串文字到"char*"的转换
这几乎肯定意味着您正在使用C++编译器.字符串文字("default_file.txt"在您的示例中)曾经是char[]C和C++中的类型.写入字符串文字会调用未定义的行为.因此,C++将字符串文字的类型更改为const char[].但在C中,类型仍然存在char[].因此,警告表明您正在使用C++编译器来编译C代码,这通常不明智.
请注意,在C语言和C++中,使用非const限定指针来表示字符串文字是不好的做法.
现在,我得到错误:表达式必须是可修改的左值.
因为您无法使用赋值运算符在运行时为数组赋值.C语法不允许这样做.你必须使用memcpy,strcpy或类似的.
更正后的代码应该是这样的:
static const char* fName = "default_file.txt";
if (argc == 2 ) {
fName = argv[1];
}
Run Code Online (Sandbox Code Playgroud)
这对于C和C++都很好,但在C++中,建议使用std::string替代方法.