Я хочу использовать функцию execev для запуска программы Texwork от развилки другой программы, и, следовательно, у меня есть следующие настройки:(CPP) старое преобразование из константной строки на символ *
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";
что: предупреждение, старое преобразование из строки постоянной на символ * (тот же warnign для argVec [0])
я должен волноваться, и если да, то как я избегаю t его?
(ой, я в Linux, 64 бит, г ++ 4.8.1 -2013 пререлиз и Const символ * argVec [] = { "TEXworks" .. и т.д. failes с этим:
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 на не-const здесь неявно. – nvoigt
['execvp'] (http://linux.die.net/man/3/execvp) запрашивает' char * const argv [] 'для второго параметра, поэтому, возможно, используйте объявление, соответствующее требованиям, чтобы избежать предупреждения. – WhozCraig
См. Также http://stackoverflow.com/questions/190184/execv-and-const-ness, http://stackoverflow.com/questions/10456043/why-is-argv-parameter-to-execvp-not-const или http://stackoverflow.com/questions/19505360/why-does-execvp-take-a-char-const-argv –