代码实现目标:希望从键盘读入一串字符,在两串字符中搜索是否存在输入字符。
代码:
#include <stdio.h>
#include <string.h>
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);
}
问题:
1.使用“fgets”从键盘读入一串字符,例如“town”,那么
`if(strstr(haystack[i], needle))` 将会判为null,从而
`printf("The substring is: %s\n", ret);`将不会执行。
2.但是如果将 fgets(needle, 5, stdin)
;原来的“10”改为“5”,运行时输入“town”
,就可以顺利输出结果:
3.如果把fgets(needle, 10, stdin)
;行注释,换成下一行scanf("%9s",needle)
;就不存在上述问题,直接能输出strstr搜索后的结果。
不明白为什么fgets那么写就不行,我的猜测是:
fgets读入一整行,所以可能设置大小为10的时候在用“town”填满needle数组的前四位后,直接在最后一位填充了“0”,之间还有一些不明字符,所以不会match,当把大小改为5的时候,就变为“town0”所以不存在上述问题。不知道自己的猜测对不对。求大神点拨,谢谢。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。