我有以下代码:
int main(void) {
char in[100];
printf("> ");
fgets(in, sizeof(in), stdin);
int pid;
char *f[100];
char *v;
int i = 1;
v = strtok(in, " ");
f[0] = v;
while (v = strtok(NULL, " ")){
f[i] = v;
i++;
}
f[i] = NULL;
execvp(f[0], f);
perror("FAILED");
exit(1);
}
出于某种原因,只要我输入“ls -l”或“date”之类的东西,就会告诉我没有这样的文件或目录。当我在代码中写道时:
f[0] = "ls";
f[1] = "-l";
f[2] = NULL;
它工作正常。有什么想法吗?
答案 0 :(得分:3)
您的代码中存在一个小错误。这是关于fgets函数的用法。 当你使用fgets时,整个给定的输入和新行字符被带入字符串v。只需在fgets函数后添加以下两行,你的代码就可以了。
int size = strlen(in);
in[size-1] = '\0';
这只是从字符串中删除换行符。
所以当你按ls -l [ENTER]时。 ls取自第一个单词f [0],-l'\ n'取自f [1],execvp无法找到并执行ls -l'\ n'
答案 1 :(得分:0)
尝试:
char* str;
str = strtok(inputBuffer," \n");