c语言 fgets 后跳到下一行,关于fgets运行逻辑的问题(C语言)

本文探讨了在C语言中使用fgets和scanf从键盘读取字符串时,与strstr函数进行字符串搜索的不同行为。当使用fgets读取长度为10的字符串时,可能存在末尾填充的问题导致搜索失败,而改为读取长度为5的字符串或使用scanf则可以正确匹配。分析了可能的原因并提供了示例代码进行说明。
摘要由CSDN通过智能技术生成

代码实现目标:希望从键盘读入一串字符,在两串字符中搜索是否存在输入字符。

代码:

#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”,就可以顺利输出结果:

bVvBet

如果把fgets(needle, 10, stdin);行注释,换成下一行scanf("%9s",needle);就不存在上述问题,直接能输出strstr搜索后的结果。

不明白为什么fgets那么写就不行,我的猜测是:

fgets读入一整行,所以可能设置大小为10的时候在用“town”填满needle数组的前四位后,直接在最后一位填充了“0”,之间还有一些不明字符,所以不会match,当把大小改为5的时候,就变为“town0”所以不存在上述问题。不知道自己的猜测对不对。求大神点拨,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值