KWJ*_*104 5 c input fgets strstr
如果我输入"test",为什么这段特殊的代码在strstr()上返回false?
char input[100];
int main()
{
fgets(input, 100, stdin);
printf("%s", input);
if(strstr("test message", input))
{
printf("strstr true");
}
}
Run Code Online (Sandbox Code Playgroud)
我以为strstr在第一个参数中搜索了第二个参数的实例?当我用一些文本替换输入或直接分配它时,它可以工作,但它似乎不适用于fgets.
sas*_*ang 10
这是因为fgets存储换行符,所以当strstr进行比较时失败.
从手册页:
fgets()从流中读取最多一个小于大小的字符,并将它们存储到s指向的缓冲区中.读数在EOF或换行符后停止.如果读取换行符,则将其存储到缓冲区中.在缓冲区中的最后一个字符之后存储'\ 0'.
input[strlen(input) - 1] = '\0';之后添加fgets.fgets读入换行符char('\n').没有'\n',"test message"所以input永远不会包含在其中.
在调用fgets知道整行是否能够真正适应它之前,你应该检查新行是否在缓冲区的末尾,并且显然也要删除它.