0

源代码如下:

#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:“纽瓦克,纽瓦克 - 一个美妙的小镇”

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

4

1 回答 1

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".

于 2013-04-12T09:22:00.857 回答