strstr() function

谁说胖子不能爱 提交于 2020-01-02 03:37:09

问题


I am trying to write a program that compares a substring that the user enters with an array of strings.

#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;
}

When I enter frogs, for example it should print the message "frogs are freaky", but it prints out nothing.

So I tried to write a line to print out the value of the strstr() function each time and they all returned 0, which means all the comparisons failed. I don't understand why, can someone help me please?


回答1:


This is because your string contains the newline character.

From the fgets documentation:

A newline character makes fgets stop reading, but it is considered a valid character by the function and included in the string copied to str.

This should fix the problem (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;
}



回答2:


fgets includes the input newline character in the buffer. Your strings don't have a newline in them, so they'll never match.




回答3:


Most likely, fgets() includes the newline character that is entered when the user presses Enter. Remove it:

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


来源:https://stackoverflow.com/questions/16905728/strstr-function

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!