Я прочитал несколько форумов, но не могу найти решение этого.C Добавление элементов массива вызывает ошибку сегментации
int sIndex = 3;
char serverArgs[serverCommandCount + 3][20];
strcpy(serverArgs[0], "ant");
strcpy(serverArgs[1], "-f");
strcpy(serverArgs[2], "/dev/server1/trunk/build.xml");
if(serverStop){strcpy(serverArgs[sIndex], "jboss-stop"); sIndex++;}
if(serverClean){strcpy(serverArgs[sIndex], "clean"); sIndex++;}
if(serverDeploy){strcpy(serverArgs[sIndex], "deploy"); sIndex++;}
if(releaseDB){strcpy(serverArgs[sIndex], "releasedb"); sIndex++;}
if(createDB){strcpy(serverArgs[sIndex], "createdb"); sIndex++;}
if(serverStart){strcpy(serverArgs[sIndex], "jboss-start"); sIndex++;}
if(serverDebug){strcpy(serverArgs[sIndex], "jboss-start-debug"); sIndex++;}
execv(antEx, serverArgs);
В этом решении проблема заключается в том, что execv хочет char * [], а не char [].
int sIndex = 3;
char *serverArgs[serverCommandCount + 3];
for(index = 0; index < serverCommandCount + 3; index++)
serverArgs[index] = malloc(20);
strcpy(serverArgs[0], "ant");
strcpy(serverArgs[1], "-f");
strcpy(serverArgs[2], "/dev/server1/trunk/build.xml");
if(serverStop){strcpy(serverArgs[sIndex], "jboss-stop"); sIndex++;}
if(serverClean){strcpy(serverArgs[sIndex], "clean"); sIndex++;}
if(serverDeploy){strcpy(serverArgs[sIndex], "deploy"); sIndex++;}
if(releaseDB){strcpy(serverArgs[sIndex], "releasedb"); sIndex++;}
if(createDB){strcpy(serverArgs[sIndex], "createdb"); sIndex++;}
if(serverStart){strcpy(serverArgs[sIndex], "jboss-start"); sIndex++;}
if(serverDebug){strcpy(serverArgs[sIndex], "jboss-start-debug"); sIndex++;}
execv(antEx, serverArgs);
Когда я пытаюсь это так, я получаю ошибку сегментации, когда он пытается выполнить
strcpy(serverArgs[1], "-f");
Что мне не хватает?
Я также пробовал это без malloc. –
Строка 'strcpy (serverArgs [2]," /dev/server1/trunk/build.xml ");', вероятно, не очень хорошая - эта строка больше, чем двадцать символов. – Peter
@Peter Вы должны добавить это как ответ (вместо комментария к вопросу). –