我对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)
根据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/