我想使用execev函数从另一个程序的fork中运行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};
答案 0 :(得分:3)
警告是合法的,因为将“const char *”分配给“char *”是危险的。指向的数据可以更改,但不应该更改。
要使用const char *构建参数向量,请将数组声明为char const * const []
要将数组传递给execv,请将其强制转换为char **。
此版本应避免警告:
char const * const argVec[] = {
"texworks"
, "temp.tex"
, NULL
};
execvp("texworks", (char**)argVec);