strstr不起作用

如果我输入“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。

这是因为fgets存储了换行符,所以当strstr进行比较时它会失败。

从手册页:

fgets()从流中读取最多一个小于大小的字符,并将它们存储到s指向的缓冲区中。 阅读在EOF或换行后停止。 如果读取换行符,则将其存储到缓冲区中。 在缓冲区中的最后一个字符之后存储’\ 0’。

添加input[strlen(input) - 1] = '\0';fgetsfgets读取换行符char( '\n' )。 "test message"没有'\n' ,因此input将永远不会包含在其中。

在调用fgets以确定整行是否能够真正适应它之前,你应该检查新行是否在缓冲区的末尾,并且显然也要删除它。