5

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

4

2 回答 2

10

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

从手册页:

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

于 2011-10-30T03:02:48.973 回答
7

在. input[strlen(input) - 1] = '\0';_ 读入换行符 ( )。没有in所以永远不会包含在其中。fgetsfgets'\n''\n'"test message"input

在调用之后,您应该真正检查换行符是否位于缓冲区的末尾,fgets以了解整行是否能够真正放入其中,并且显然也可以将其删除。

于 2011-10-30T03:03:06.353 回答