繁体   English   中英

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

[英]Head First C Program ( text search program)

我对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;
}

根据cplusplus网站,此行:

fgets(search_for, 80, stdin);

在search_for的末尾捕获newline

如果输入:

heart<intro>

您还将获得代表intro按键的字符,并且在文本中找不到heart\\n

这样做:

search_for[strlen(search_for) - 1] = '\0';

删除字符串中的换行符( heart\\n to heart ),因为如果不删除换行符,搜索将失败。

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

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

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

search_for[strlen(search_for) - 1] = '\0';

'\\ 0'是字符串的显式NULL终止符。 以空字符结尾的字符串是存储为包含字符的数组并以空字符('\\ 0',在ASCII中称为NUL)结尾的字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM