首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strstr()函数

strstr()函数
EN

Stack Overflow用户
提问于 2013-06-04 04:59:03
回答 3查看 3.7K关注 0票数 6

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

代码语言:javascript
复制
#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;
}

例如,当我输入frogs时,它应该打印消息"frogs are freaky",但它什么也不打印。

因此,我尝试编写一行代码,每次输出strstr()函数的值,它们都返回0,这意味着所有的比较都失败了。我不明白为什么,有人能帮帮我吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-04 05:01:27

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

fgets documentation

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

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

代码语言:javascript
复制
#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;
}
票数 7
EN

Stack Overflow用户

发布于 2013-06-04 05:01:02

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

票数 5
EN

Stack Overflow用户

发布于 2013-06-04 05:01:06

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

代码语言:javascript
复制
char *p = strchr(input, '\n');
if (p)
    *p = 0;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16905728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档