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

时间:2015-03-27 00:33:46

标签: c

编写包含函数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++;
  }
}

它汇编得很好......但是在每次运行中它都表示核心倾倒了。我看不出哪里出错了?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你没有检查fopen的返回值,你没有为你读到的字符串分配任何内存,你不会继续阅读文件中的输入,你不要&#39 ; t正确检查输入结束。

#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;
}