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

时间:2013-04-12 09:19:11

标签: 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;
}

当我按如下方式使用该程序时:

  

搜索:城镇

我希望像

这样的东西
  第1道:'纽瓦克,纽瓦克 - 一个美妙的小镇'

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

1 个答案:

答案 0 :(得分:5)

fgets(search_for, 80, stdin);

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

"town\n"

并且它不是任何tracks的子字符串,因此找不到匹配项,也没有打印任何内容。

从缓冲区中删除换行符

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

让它搜索"town"