mar*_*xin 5 c strtok execvp argv
我在使用时遇到了麻烦execvp()。execvp()期望将char * const *类型作为第二个参数。我想解析传递给应用程序的参数(在中argv)并制作该类型的数组。例如,用户正在调用二进制文件,如下所示:
./myapp "ls -a -l"
Run Code Online (Sandbox Code Playgroud)
然后我从中制作以下数组:
{"ls", "-a", "-l", NULL}
Run Code Online (Sandbox Code Playgroud)
现在,我的代码如下所示:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
它有效,但是我得到警告:
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 **’
如何正确做?
你可以只使用char *p[10].
分解一下:char *const *p意思是“指向非常量字符的常量指针的非常量指针”——也就是说,p可写p[0]、不可写和p[0][0]可写。
| 归档时间: |
|
| 查看次数: |
4010 次 |
| 最近记录: |