使用标准输入的 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
函数在读取一个换行符时会在缓冲区中存储一个换行符,因此我们需要将其添加到字符串中以进行检查。
我正在尝试使用大小为 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
函数在读取一个换行符时会在缓冲区中存储一个换行符,因此我们需要将其添加到字符串中以进行检查。