【问题标题】:every time strstr() function is returning false. when i pass any input always function is returning false每次 strstr() 函数返回 false。当我传递任何输入时,函数总是返回 false
【发布时间】:2016-10-03 20:19:11
【问题描述】:

我正在尝试搜索轨道数组中是否有可用的轨道。当我给出任何输入时,strstr() 函数总是返回 false。如果我使用 else 块,则每次执行 else 块。

    char tracks[][80] = {
    "I left my heart in Harvard Med School",
    "Newark, Newark - a wonderful town",
    "Dancing with a Dork",
    "From here to maternity",
    "The girl from Iwo Jima",
    };

    // function to search the track with entered search string //
    void find_track(char search_for[]) {
        int i;
        for (i = 0; i < 5; i++) {
            /** this if condition is returning false every time */
            if (strstr(tracks[i], search_for)){
            printf("Track %i: '%s'\n", i, tracks[i]);
            }/**else{
                printf("some thing went wrong @ %i\n", i);
            }**/
        }
    }



    int main() {
        char search_for[80];
        printf("Search for: ");
        fgets(search_for, 80, stdin);
        find_track(search_for);
        return 0;
    }

输入:

gcc test.c -o test && test

搜索:with

预期结果:Track 2:'Dancing with a Dork'

请帮帮我。

【问题讨论】:

标签: c strstr


【解决方案1】:

fgets 也会读取换行符。您需要先将其从search_for 中删除,然后再将其传递给find_track

Removing the newline from fgets

【讨论】:

  • 选择优雅的奖励答案,而不是丑陋的接受答案
  • 我看到了多种方法来实现这一点,但是 "search_for[len-1] = '\0;" 之间有什么区别和 "search_for[strcspn(search_for,"\n")] = 0;"。哪个更好用,为什么?
  • @Nara,我认为search_for[strcspn(search_for,"\n")] = 0; 更好,因为它不对换行符的位置做出任何假设。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多