2

我需要使用spawnvp()运行命令,以便重定向输出。我的问题是,我没有 argv,而只是一个带有整个命令的字符串,所以我需要拆分它。不幸的是,当我将生成的 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

4 回答 4

3

我不会为此而把我的手放在火里,但你应该&从这条线上放下。

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

argv == &argvargv2 != &argv2

于 2011-05-07T12:57:35.000 回答
1

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

于 2011-05-07T13:03:49.733 回答
0

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

popen("command.exe &> somefile.txt")
于 2011-05-07T13:16:47.023 回答
0

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

(char []){ "sh", "-c", command, 0 }
于 2011-05-07T13:54:24.623 回答