[英]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的字符串中。
search_for[strlen(search_for) - 1] = '\0';
'\\ 0'是字符串的顯式NULL終止符。 以空字符結尾的字符串是存儲為包含字符的數組並以空字符('\\ 0',在ASCII中稱為NUL)結尾的字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.