gpt4 book ai didi

c - 字符串示例未按预期运行

转载 作者:太空狗 更新时间:2023-10-29 14:58:49 25 4
gpt4 key购买 nike

我正在学习 C,并且一直在学习“Head First C”这本书。我找到了一个示例,其中这是结果代码:

#include <stdio.h>
#include <string.h>


char tracks[][80] = {
"I left my heart in Harvard Med School",
"Newark, Newark - A 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);
find_track(search_for);
return 0;
}

我已经进行了双重、三重和四重检查。此代码与书中的示例完全相同。起初我自己制作了它,这样我就不会只是复制而不学习,但是当我不工作时,我会直接复制它以确保。该代码请求一个字符串,然后打印包含您给它的字符串的所有轨道。在书中,当示例代码运行时,给出的字符串是“town”,代码打印“Newark, Newark - A wonderful town”。但是,当我做完全相同的事情时,它只打印一个换行符。

我怎么强调都不为过,这段代码与书中的代码完全相同,但行为不同。有人能看出原因吗?

最佳答案

问题出在这条语句上

fgets(search_for, 80, stdin);

函数fgets 在字符串中包含换行符。您必须将其从字符串中删除。例如

size_t n = strlen( search_for );

if ( n != 0 && search_for[n-1] == '\n' ) search_for[n-1] = '\0';

来自 C 标准

说明

2 The fgets function reads at most one less than the number of characters specified by n from the stream pointed to by stream into the array pointed to by s. No additional characters are read after a new-line character (which is retained) or after end-of-file. A null character is written immediately after the last character read into the array.

关于c - 字符串示例未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28839985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com