我已经阅读了几个论坛,但找不到解决方案。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”);'可能不太好 - 该字符串大于20个字符。 – Peter
@Peter你应该添加一个答案(而不是对问题的评论)。 –