【发布时间】:2012-10-18 18:13:50
【问题描述】:
我在使用 execvp() 时遇到问题。 execvp() 期望类型 char * const* 作为第二个参数。我想解析传递给应用程序的参数(在argv 中)并创建一个该类型的数组。例如,用户正在调用二进制文件,如下所示:
./myapp "ls -a -l"
然后我从中创建以下数组:
{"ls", "-a", "-l", NULL}
现在,我的代码如下所示:
const char* p[10];
char temp[255] = "ls -a -l";
p[0] = strtok(temp, " ");
for(i=0; i<9; i++) {
if( p[i] != NULL ) {
p[i+1] = strtok(NULL, " ");
} else {
break;
}
}
它有效,但我收到警告:
main.c:47: warning: passing argument 2 of ‘execvp’ from incompatible pointer type
/usr/include/unistd.h:573: note: expected ‘char * const*’ but argument is of type ‘const char **’
如何正确地进行?
【问题讨论】:
-
您在代码中的哪个位置调用
execvp()?test变量在strtok()中做什么,我猜temp变量应该是。你在哪里定义了test变量? -
当然test是临时的,我只是写了一个例子。我正在调用 execvp(p[0], p)... 问题出在 p 类型上。
-
无论如何,问题解决了。谢谢。
-
顺便说一句:你的循环逻辑有问题。如果输入字符串中恰好有 9 个或更多标记,则 p[] 数组将没有最终的 NULL 指针。
-
我知道。它只是一个例子。在我的代码中,我将使用 malloc/realloc。