源代码如下:
#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道:'纽瓦克,纽瓦克 - 一个美妙的小镇'
相反,我的程序退出并且不打印任何内容。我做错了什么?
答案 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"
。