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