gpt4 book ai didi

c - 文件指针导致核心转储。可能是一些愚蠢的事情

转载 作者:行者123 更新时间:2023-11-30 21:29:44 24 4
gpt4 key购买 nike

编写包含函数 void process_file(FILE* f) 的程序 myuniq.c,该函数一次从给定文件一行读取所有输入,同时在内存中保留连续两行,并将每一行打印到标准输出,如果它不等于之前读取的行。

^^这是我正在做的作业。我的代码如下:

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

void process_file(FILE* f);

int main()
{
FILE *fil = fopen("text.txt","r");
process_file(fil);

return 0;
}

void process_file(FILE* f)
{
FILE *fi = f;
char *firstLine = fgets(firstLine, 999, f);
char *secondLine = fgets(secondLine, 999, f);

while (feof(fi))
{
if (firstLine == secondLine)
{
puts(secondLine);
}
else
{
puts(firstLine);
puts(secondLine);
}
firstLine++;
secondLine++;
}
}

它编译得很好......但每次运行时它都会说核心已转储。我看不出我哪里错了?有什么想法吗?

最佳答案

您不检查 fopen 的返回值,您不为您读取的字符串分配任何内存,您不继续从文件中读取输入,您不正确检查输入。

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

#define MY_MAX_LINE 999

void process_file(FILE* f)
{
char firstLine[MY_MAX_LINE + 1];
char secondLine[MY_MAX_LINE + 1];

while (1)
{
if (!fgets(firstLine, sizeof(firstLine), f))
break;

puts(firstLine);

if (!fgets(secondLine, sizeof(secondLine), f))
break;

if (strncmp(firstLine, secondLine, sizeof(firstLine)))
puts(secondLine);
}

if (!feof(f))
perror("Problem reading from file"), exit(1);
}

int main(int argc, char **argv)
{
FILE *f = fopen("text.txt", "r");

if (!f)
perror("text.txt"), exit(1);

process_file(f);
fclose(f);

return 0;
}

关于c - 文件指针导致核心转储。可能是一些愚蠢的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29291343/

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