首页 > 关于fgets运行逻辑的问题(C语言)

关于fgets运行逻辑的问题(C语言)

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

代码:

#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”所以不存在上述问题。不知道自己的猜测对不对。求大神点拨,谢谢。


回车键的问题,
并且应该养成良好的习惯,给予一段内存初始值。


fgets取到的内容包括换行符

【热门文章】
【热门文章】