(CPP) 从常量字符串到字符 * 的旧转换
(cpp) old conversion from constant string to char *
我想使用 execev 函数从另一个程序的分支运行 texwork 程序,因此,我有以下设置:
char *argVec[3];
argVec[0] = "texworks";
argVec[1] = "temp.tex";
argVec[2] = NULL;
execvp("texworks", argVec);
它有效,但警告我:
Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*« [-Wwrite-strings]
argVec[1] = "temp.tex";
即:警告,从字符串常量到 char* 的旧转换(argVec[0]的警告相同)
我应该担心吗,如果是这样,我该如何避免这种情况?
(哦,我在 Linux,64 位,g++ 4.8.1 -2013 预发行版,并且 const char* argVec[] = {"texworks" .. 等失败了:
Fehler: ungültige Umwandlung von »const char**« in »char* const*« [-fpermissive]
execvp("texworks", argVec);
^
In file included from path/to/file:
/usr/include/unistd.h:578:12: Fehler: Argument 2 von »int execvp(const char*, char* const*)« wird initialisiert [-fpermissive]
extern int execvp (const char *__file, char *const __argv[])
^
/path/to/file:cursor:position: Fehler: Sprung zur case-Marke [-fpermissive]
default:
^
/path/to/file:cursor:position:: Fehler: überschneidet Initialisierung von »const char* argVec [3]«
const char * argVec[] = {"texworks" , "temp.tex", NULL};
警告是合法的,因为将"const char*"分配给"char *"是危险的。指向的数据可以更改,但不应该更改。
要使用 const char* 构建参数向量,请将数组声明为 char const * const[]
要将数组传递给 execv,请将其转换为 char**。
此版本应避免以下警告:
char const * const argVec[] = {
"texworks"
, "temp.tex"
, NULL
};
execvp("texworks", (char**)argVec);
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试将字符串/字符转换为整数会产生意外结果
- 如何使用C++将字符串中的字符转换为整数变量
- 字符转换功能 std::isupper() & std::islower() C++17
- 将字符 * 转换为字符串 *
- 在编译时将常量字符* 转换为常量 char_type*
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 错误:请求从"常量字符 [5]"转换为非标量类型"字符串"
- 无法使用字符串流将字符转换为字符串C++
- 将无符号字符 C++ 转换为 C#
- C++:使用没有位移位的指针将无符号字符转换为无符号 int
- 为什么我可以隐式地将字符*转换为常量字符*,但不能将无符号字符*
- 无法<string>从"常量字符 []"转换为<类名>
- 不能将字符转换为整数吗?
- 编译时将字符*转换为字节
- CP1251:从字符* 转换为 wchar_t* 时的编码失真
- 将单个字符转换为 std::string 前缀 \x01
- PPM 将字符转换为 int 授予负数
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类
- 将常量字符* 转换为字符时出错