[英]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.