strstr() 函数

Posted

技术标签:

【中文标题】strstr() 函数【英文标题】:strstr() function 【发布时间】: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,这意味着所有的比较都失败了。我不明白为什么,有人可以帮我吗?

【问题讨论】:

【参考方案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;

【讨论】:

以上是关于strstr() 函数的主要内容,如果未能解决你的问题,请参考以下文章

.模拟实现strstr函数

strstr() 函数

判断子串在主串中位置的函数——strstr函数

判断子串在主串中位置的函数——strstr函数

判断子串在主串中位置的函数——strstr函数

判断子串在主串中位置的函数——strstr函数