簡體   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