Head First C Program(文本搜索程序)

Bee*_*ran 1 c

我对Head First C的以下程序有疑问.在主要功能下的书中,作者没有使用过search_for[strlen(search_for) - 1] = '\0';; 他的程序运行正常.但是,当我使用该程序的原始版本(按照书)时,它无法找到我输入的文本.我从github获得了以下版本(可以在字符串中找到文本),但我仍然无法理解为什么使用它.如果有人能解释我,我会非常感激.

#include <stdio.h>
#include <string.h>

char tracks[][80] = {
    "I left my heart in Harvad Med School",
    "Newark, Newark -  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);
    search_for[strlen(search_for) - 1] = '\0';
    find_track(search_for);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

lil*_*zek 5

根据cplusplus网站,这行:

fgets(search_for, 80, stdin);
Run Code Online (Sandbox Code Playgroud)

newline在search_for的末尾捕获角色.

如果输入:

heart<intro>
Run Code Online (Sandbox Code Playgroud)

您还将获得代表intro击键的角色,您将无法heart\n在文本中找到.

这样做:

search_for[strlen(search_for) - 1] = '\0';
Run Code Online (Sandbox Code Playgroud)

将从字符串(to )中删除换行符,因为如果您不删除换行符,则搜索将失败.heart\nheart

从流中读取字符并将它们作为C字符串存储到str中,直到读取(num-1)个字符或者到达换行符或文件结尾,以先发生者为准.

换行符使fgets停止读取,但它被函数视为有效字符,并包含在复制到str的字符串中.

http://www.cplusplus.com/reference/cstdio/fgets/