strstr不起作用

时间:2011-10-30 02:56:09

标签: 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");

    }


}

我认为strstr在第一个参数中搜索了第二个参数的实例?当我用一些文本替换输入或直接分配它时,它可以工作,但它似乎不适用于fgets。

2 个答案:

答案 0 :(得分:10)

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

从手册页:

  

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

答案 1 :(得分:7)

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

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