#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);
getch();
return 0;
}
这是直接从 Head First C 中获取的代码。这行不通。另一方面 如果我在 main 中更改行
char search_for[80];
到
char *search_for = "town"
它给了我预期的结果。我不明白为什么它不起作用。我知道直接粘贴代码并告诉您查找错误在这里不是很可接受,但我想这是一小段基本代码,所以它可以。
谢谢
最佳答案
上面代码的问题在于它没有考虑到 fgets 在字符串中留下换行符。因此,当您键入 town
并按下 enter
时,您最终将搜索 "town\n"
。
解决此问题的一种廉价方法是在调用 fgets
search_for[strlen(search_for) - 1] = 0;
关于字符串匹配的 C 代码 [Head First C] 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12019607/