为什么strstr似乎没有在我的C程序中工作?

del*_*ber 0 c

源代码如下:

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

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",
};


void find_track(char search_for[]) {
    int i;
    for (i=0; i<5; i++) {
        if (strstr(tracks[i], search_for)) {
            printf("Track %i: '%s'\n", i, tracks[i]);
        }
    }
}

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

当我使用该程序时如下:

搜索:城镇

我希望有类似的东西

第1轨:'纽瓦克,纽瓦克 - 一个美妙的小镇'

相反,我的程序退出并且不打印任何内容.我究竟做错了什么?

Dan*_*her 5

fgets(search_for, 80, stdin);
Run Code Online (Sandbox Code Playgroud)

留下用于将输入发送到输入缓冲区中的程序的换行符,因此传递给strstr第二个参数的字符串实际上是

"town\n"
Run Code Online (Sandbox Code Playgroud)

并且这不是任何子字符串tracks,因此找不到匹配,也没有打印.

从缓冲区中删除换行符,

size_t n = strlen(search_for);
if (n > 0 && search_for[n-1] == '\n') {
    search_for[n-1] = 0;
}
Run Code Online (Sandbox Code Playgroud)

让它搜索"town".