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

源代码如下:

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

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

 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"