为spawnvp()生成argv的问题

时间:2011-05-07 12:52:53

标签: c argv

我需要使用 spawnvp()运行命令,因此我可以重定向输出。我的问题是,我没有argv,只是一个包含整个commnd的字符串,所以我需要拆分它。不幸的是,当我将生成的argv传递给函数时,我遇到了异常。

这样做可以:

char* argv[2];
argv[0] = "kzip";
argv[1] = NULL;

这就是我这样做的方式,这是失败的:

char** argv2 = (char**)malloc(sizeof(char*) * 2);
argv2[0] = "kzip";
argv2[1] = NULL;

我打电话给 spawnvp()

hProcess = (HANDLE)spawnvp(P_NOWAIT, argv2[0], (const char* const*)&argv2);

我知道char []和char *之间有一些区别,但我无法弄清楚如何创建动态创建的char * []而不是char **。

4 个答案:

答案 0 :(得分:3)

我不会把手放在火中,但你应该从这一行放下&

hProcess = (HANDLE)spawnvp(P_NOWAIT, argv2[0], (const char* const*)&argv2);

argv == &argvargv2 != &argv2

答案 1 :(得分:1)

你对spawnvp的最后一个参数是错误的,它应该只是spawnvp(P_NOWAIT, argv2[0], argv2);,而不是指针的地址。

答案 2 :(得分:0)

使用spawnxx()重定向输出不是一个好主意。最好使用popen()并构造命令字符串以适当地重定向,例如如果你想将stdout和stderr从command.exe重定向到somefile.txt:

popen("command.exe &> somefile.txt")

答案 3 :(得分:0)

如果你有一个shell风格的命令行,你应该使用这个argv生成:

(char []){ "sh", "-c", command, 0 }