【问题标题】:strstr() functionstrstr() 函数
【发布时间】:2013-05-30 03:13:41
【问题描述】:

我正在尝试编写一个程序,将用户输入的子字符串与字符串数组进行比较。

#include <stdio.h>
#include <string.h>

char animals[][20] = {
    "dogs are cool",
    "frogs are freaky",
    "monkeys are crazy"
};

int main() {
    char input[10];

    puts("Enter animal name: ");
    fgets(input, sizeof(input), stdin);

    int i;
    for(i = 0; i < 3; i++) {
        if(strstr(animals[i], input))
            printf("%s", animals[i]);
    }
    return 0;
}

例如,当我输入青蛙时,它应该打印消息“青蛙很奇怪”,但它什么也没打印。

于是我试着写了一行打印出strstr()函数的值,每次都返回0,这意味着所有的比较都失败了。我不明白为什么,有人可以帮我吗?

【问题讨论】:

    标签: c strstr substring


    【解决方案1】:

    fgets 在缓冲区中包含输入换行符。您的字符串中没有换行符,因此它们永远不会匹配。

    【讨论】:

      【解决方案2】:

      fgets() 很可能包含用户按 Enter 时输入的换行符。删除它:

      char *p = strchr(input, '\n');
      if (p)
          *p = 0;
      

      【讨论】:

      • *p = 0; == *p = '\0' ??
      【解决方案3】:

      这是因为您的字符串包含换行符。

      来自fgets documentation

      换行符使 fgets 停止读取,但它被函数视为有效字符并包含在复制到 str 的字符串中。

      这应该可以解决问题 (demo):

      #include <stdio.h>
      #include <string.h>
      
      char animals[][20] = {
      "dogs are cool",
      "frogs are freaky",
      "monkeys are crazy"
      };
      
      int main() {
          char input[10];
      
          printf("Enter animal name: ");
          scanf("%9s", input);
      
          int i;
          for(i = 0; i < 3; i++) {
              if(strstr(animals[i], input))
                  printf("%s", animals[i]);
          }
          return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-14
        • 1970-01-01
        • 1970-01-01
        • 2015-11-20
        • 2020-05-09
        • 2011-11-13
        • 1970-01-01
        • 2021-10-21
        相关资源
        最近更新 更多