使用标准输入的 C-fgets() 不起作用

标签 c fgets

我正在尝试使用 fgetsstdin 获取输入,使用大小为 128 的字符数组,该数组应该在读取“exit”时停止,但它没有

char cmd[128];

if(fgets(cmd,128,stdin)=="exit"){
    //stuff
   }

最佳答案

您不能将字符串与 == 进行比较运算符(operator)。

你在这里实际做的是比较函数的返回值(成功时地址为cmd,失败时为NULL)与字符串文字的地址"exit"。 .这永远不会是真的。

您应该检查 NULL 的返回值, 然后使用 strcmp比较函数 cmd反对"exit" :

if ((fgets(cmd,128,stdin)) != NULL && 
    (strcmp(cmd,"exit\n") == 0 || strcmp(cmd,"exit\r\n") == 0) {
    ...

请注意 fgets如果读取一个换行符,该函数会在缓冲区中存储一个换行符,因此我们需要将其添加到要检查的字符串中。

关于使用标准输入的 C-fgets() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40094072/

相关文章:

c - K&R 第二版标准库中的 fgets 实现

C - 带有嵌套 fgets 循环的 fork 和管道

C:使用 fgets() 将字符串存储在动态缓冲区中时调用 realloc() 后的奇怪行为

C - 从未分配给变量的函数返回的结构

c - 并行 (CUDA) 二维泊松求解器

c - 解除绑定(bind) sigaction 处理程序

C 的 fgets 是否可以被哄骗来处理文件中的字符串 *not* ?

c - fgets() 是否总是以 null 终止它返回的字符串?

C 程序编译,但在运行时失败(数组太大?)。和 'checklist' 的建议?

c - 到达指向 C 中结构的指针