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

C-fgets() using stdin doesnt work

我正在尝试使用大小为 128 的字符数组从 stdin 使用 fgets 获取输入,该数组应该在读取 "exit" 时停止,但它不会' t

char cmd[128];

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

您不能使用 == 运算符比较字符串。

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

您应该检查 NULL 的 return 值,然后使用 strcmp 函数将 cmd"exit" 进行比较:

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

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