我正在从Head First C一书中学习C,我尝试了其中一个例子,尽管代码相同,我的代码仍然不像书中的例子那样运行。 代码旨在使用strstr()函数在另一个字符串中查找字符串,但在运行我的代码后,它只询问我的输入,并显示"程序以退出代码结束: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;
}
运行代码后的结果是:
Search for: (my input)
Program ended with exit code: 0
帮助!
答案 0 :(得分:2)
如果您的输入是使用换行符输入的,则fgets()
会在生成的search_for
字符串中包含换行符。另一方面,如果您使用EOF终止输入(通常 ctrl + D ),则它不包含换行符,并且您的程序按预期工作。
您可以在this question及其答案中找到避免此问题的技巧。
答案 1 :(得分:2)
那段代码错了; fgets
读取整行,将换行符留在目标缓冲区中(除非您提供了79个字符)。出于这个原因,find_track
将查找带有终止换行符的字符串,当然无法找到。
可能的修复方法是在fgets
之后删除输入字符串中的最后一个字符。
if(*search_for) search_for[strlen(search_for) -1] = 0;
或使用不同的输入函数,它不会读取换行符。
答案 2 :(得分:0)
search_for [strlen(search_for)-1] = 0; fgets(search_for,80,stdin);
fgets()添加换行符