【发布时间】:2017-09-09 21:38:40
【问题描述】:
我编写这个程序是为了使用execvp 命令,这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(int argc, const char * argv[]) {
char **cmd;
int i;
if (argc == 1){
fprintf(stdout, "No command inserted!\n");
exit(EXIT_SUCCESS);
}
cmd = (char **) malloc( (argc + 1) * sizeof(char *));
cmd[0] = (char *) malloc( strlen(argv[1] + 1 ) * sizeof(char) );
strcpy(cmd[i], argv[i+1]);
if (argc > 2){
for (i = 1 ; i < argc - 1 ; i++ ){
cmd[i] = (char *) malloc( strlen(argv[i+1] + 1 ) * sizeof(char) );
strcpy(cmd[i], argv[i+1]);
}
cmd[argc] = NULL;
execvp(cmd[0], cmd);
fprintf(stderr, "Failed Execution or not existing command!!\n");
exit(EXIT_FAILURE);
}
cmd[1] = NULL;
execvp(cmd[0], cmd);
fprintf(stderr, "Failed Execution or not existing command!!\n");
exit(EXIT_FAILURE);
return 0;
}
我使用这些命令在终端上运行这个程序
./a.out ls
./a.out who
./a.out ls -l
./a.out mkdir newdir
前两个和其他没有参数的命令一样工作正常。最后两个我在终端中收到No such File or Directory 错误,但实际上mkdir 命令创建了目录newdir ...
谁能帮帮我
【问题讨论】:
-
你在调用
strcpy时使用了未初始化的i。