C编程中的strstr()函数

时间:2017-06-05 05:15:08

标签: c fgets strstr

我正在从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

帮助!

3 个答案:

答案 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()添加换行符