gpt4 book ai didi

c - 查找输入中最长的单词时出现段错误

转载 作者:行者123 更新时间:2023-11-30 18:44:58 25 4
gpt4 key购买 nike

我编写了一个程序来查找输入中最长的单词。当使用 valgrind 或在本地运行测试时,我没有收到任何错误,但我通过电子邮件发送代码的评分程序报告了段错误。

int main(void)
{
char *longest = malloc(1);
size_t size = 1;
do {
char word[20];
if (scanf("%s", word) > 0) {
if (strlen(word) > size) {
longest = realloc(longest,strlen(word)+1);
strcpy(longest,word);
size = strlen(word);
}
}
} while (getchar() != EOF);
printf("%zu characters in longest word: %s\n", strlen(longest),longest);
free(longest);
return 0;
}

最佳答案

您的问题出在 char word[20]; 行以及 scanf 读取单词的方式中。从 scanf 的角度来看,单词是任何非空格序列。例如,realloc(longest,strlen(word)+1); 被视为一个单词,仅此一项就超过 20 个字符。

您应该使用更强大的函数来读取单词并为其分配空间。最经济高效的解决方案是使用 getline() 读取行,然后使用 strsep() 提取单词。

关于c - 查找输入中最长的单词时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56114764/

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