如果我输入"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一起工作。
发布于 2011-10-30 11:02:49
这是因为fgets存储换行符,所以当strstr进行比较时,它会失败。
从手册页:
fgets()从流中读取最多一个小于大小的字符,并将它们存储到s指向的缓冲区中。读取在EOF或换行符之后停止。如果读取了换行符,则将其存储到缓冲区中。'\0‘存储在缓冲区中的最后一个字符之后。
发布于 2011-10-30 11:03:06
在fgets之后添加input[strlen(input) - 1] = '\0';。fgets读取换行符('\n')。"test message"中没有'\n',因此input永远不会包含在其中。
在调用fgets之后,您应该真正地检查换行符是否在缓冲区的末尾,以了解整个行是否能够实际装入它,并明显地删除它。
https://stackoverflow.com/questions/7943032
复制相似问题