gpt4 book ai didi

c - fgets() 函数无法识别数据

转载 作者:行者123 更新时间:2023-11-30 19:24:28 25 4
gpt4 key购买 nike

我目前正在构建自己的 shell。我设法使用 scanf() 制作 ls 函数,现在我在 cd 上。但我意识到 cd 和 file 之间有空格,所以我将 scanf() 更改为 fgets()。

空间问题解决了,但又出现了一个问题。即使我输入正确,程序也无法运行。

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”并按 Enter 键时,fgets 将接收“ls\n”,因为 Enter 创建一个\n 字符,命令将为“ls\n\0”因为\0 表示字符串的结尾,所以我们现在可以忽略它。

当您 strcmp("ls",command) 时,您正在将“ls”与命令中以\0 结尾的字符串进行比较,因此“ls\n”因为“ls”和“ls\n”不同,它会失败。

正如其他人已经说过的,您可以将\n 添加到比较字符串中,或​​者删除\n由于您可能计划在 cd 或 ls 之后添加更多内容,因此您可以研究字符串分隔,例如与 strtok()

关于c - fgets() 函数无法识别数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60264670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com