我需要使用 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 **。
答案 0 :(得分:3)
我不会把手放在火中,但你应该从这一行放下&
。
hProcess = (HANDLE)spawnvp(P_NOWAIT, argv2[0], (const char* const*)&argv2);
argv == &argv
但argv2 != &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 }