C++ (cpp)从常量字符串到字符的旧转换*

C++ (cpp)从常量字符串到字符的旧转换*,c++,C++,我想使用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-

我想使用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";
即:警告,从字符串常量到字符*(argVec[0]的警告符号相同)的旧转换

我应该担心吗?如果是,我该如何避免

(哦,我使用的是Linux,64位,g++4.8.1-2013预发行版,const char*argVec[]={“texworks.”。etc在这方面失败:

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);

实际上,数组可以是一个const char*数组。可能这就是它的意思,因为这里基本上是隐式地将const转换为非const。请求
char*const argv[]
作为第二个参数,因此可能使用符合的decl来避免警告。另请参见,或“查看execvp函数的原型”:int execv(const char*path,char*const argv[]);这很遗憾,但是execvp不会接受您的
char const*const argVec[]
我明白您的意思。您可能需要一个演员阵容。将进行编辑。