fgets() 函数无法识别数据
fgets() function doesn't recognise the data
我目前正在构建自己的 shell。
我设法使用 scanf() 使 ls 起作用,现在我在 cd 上。但我意识到 cd 和文件之间有 space,所以我将 scanf() 更改为 fgets()。
space的问题解决了,但是又出现了一个问题。即使我输入正确,程序也无法运行。
char command[MAX_LEN];
int result = 1;
char *pwd[MAX_LEN];
do {
printf("%s > ", getcwd(pwd, 100));
fgets(command, 100, stdin);
if(!strcmp("cd", command))
change_dir();
if(!strcmp("ls", command))
list_dir();
} while(strcmp("exit", command));
return 0;
我的代码有什么问题?你能告诉我为什么会这样吗?
fgets 最多读取 size-1 个字符(在你的例子中是 100-1 所以 99)并在字符串的末尾放置一个 '\0',所以当你在 stdin 中键入 "ls" 并点击输入,fgets 将收到 "ls\n" 因为输入创建了一个 \n 字符,命令将是 "ls\n[=18=]"
因为 \0 表示字符串的结尾,我们现在可以在这里忽略它。
当您使用 strcmp("ls",command) 时,您正在将 "ls" 与命令中在 \0 之前结束的字符串进行比较,因此 "ls\n" 因为 "ls" 和 "ls\n"不一样,会失败。
正如其他人已经说过的,您可以将 \n 添加到您的比较字符串中,或者删除 \n
由于您可能计划在 cd 或 ls 之后的行中添加更多内容,因此您可以查看字符串分隔,例如用 strtok()
我目前正在构建自己的 shell。 我设法使用 scanf() 使 ls 起作用,现在我在 cd 上。但我意识到 cd 和文件之间有 space,所以我将 scanf() 更改为 fgets()。
space的问题解决了,但是又出现了一个问题。即使我输入正确,程序也无法运行。
char command[MAX_LEN];
int result = 1;
char *pwd[MAX_LEN];
do {
printf("%s > ", getcwd(pwd, 100));
fgets(command, 100, stdin);
if(!strcmp("cd", command))
change_dir();
if(!strcmp("ls", command))
list_dir();
} while(strcmp("exit", command));
return 0;
我的代码有什么问题?你能告诉我为什么会这样吗?
fgets 最多读取 size-1 个字符(在你的例子中是 100-1 所以 99)并在字符串的末尾放置一个 '\0',所以当你在 stdin 中键入 "ls" 并点击输入,fgets 将收到 "ls\n" 因为输入创建了一个 \n 字符,命令将是 "ls\n[=18=]" 因为 \0 表示字符串的结尾,我们现在可以在这里忽略它。
当您使用 strcmp("ls",command) 时,您正在将 "ls" 与命令中在 \0 之前结束的字符串进行比较,因此 "ls\n" 因为 "ls" 和 "ls\n"不一样,会失败。
正如其他人已经说过的,您可以将 \n 添加到您的比较字符串中,或者删除 \n 由于您可能计划在 cd 或 ls 之后的行中添加更多内容,因此您可以查看字符串分隔,例如用 strtok()