代码实现目标:希望从键盘读入一串字符,在两串字符中搜索是否存在输入字符。
代码:
#include
#include
int main()
{
const char haystack[][20] = {"TutorialsPoint","Lala town"};
char needle[10];
char *ret;
fgets(needle, 10, stdin);
//scanf("%9s",needle);
printf("%s\n", needle);
for(int i=0; i<2; i++)
{
ret = strstr(haystack[i], needle);
printf("%p\n", ret);
if(strstr(haystack[i], needle))
printf("The substring is: %s\n", ret);
}
return(0);
}
问题:
使用“fgets”从键盘读入一串字符,例如“town”,那么
`if(strstr(haystack[i], needle))` 将会判为null,从而
`printf("The substring is: %s\n", ret);`将不会执行。
但是如果将 fgets(needle, 5, stdin);原来的“10”改为“5”,运行时输入“town”,就可以顺利输出结果:
如果把fgets(needle, 10, stdin);行注释,换成下一行scanf("%9s",needle);就不存在上述问题,直接能输出strstr搜索后的结果。
不明白为什么fgets那么写就不行,我的猜测是:
fgets读入一整行,所以可能设置大小为10的时候在用“town”填满needle数组的前四位后,直接在最后一位填充了“0”,之间还有一些不明字符,所以不会match,当把大小改为5的时候,就变为“town0”所以不存在上述问题。不知道自己的猜测对不对。求大神点拨,谢谢。