分段失败?为什么?

时间:2013-11-19 12:47:38

标签: c segmentation-fault fault

我会将带有一个或多个Pascal-Strings的二进制文件转换为.Txt文件。这是正确的方法,但它似乎是一个分段错误。我不明白,问题出在哪里。文件大小为23.

void printFile(char *buffer, char *output_file, int file_size)
{
  FILE *out_file = fopen(output_file, "w");
  int i = 0;
  int j = 1;
  int cnt = 0;
  int cnt_word = 0;
  int block = 4;

  while (i < block)
  {
    cnt = cnt + buffer[i];
    i++;
  }

  while (j <= cnt)
  {
    while (i < file_size)
    {
      while (i < (i + block))
      {
        cnt_word = cnt_word + buffer[i];
        i++;
      }

      while (i < (i + cnt_word))
      {
        fprintf(out_file, "%c", buffer[i]);
        i++;
      }

      fprintf(out_file, " ");
      cnt_word = 0;
      j++;
    }
  }

  fclose(out_file);
}

这是其他函数get filesize

fseek(in_file, 0, SEEK_END);
file_size = ftell(in_file);
rewind(in_file);

//allocate memory for buffer
buffer = malloc(file_size);

2 个答案:

答案 0 :(得分:2)

while (i < (i + block)) 

这里的块是4,我看不出这种情况怎么会失败

答案 1 :(得分:2)

IIRC pascal字符串存储的长度为第一个字节,它们不存储终止\ 0,因为C字符串是

为了显示字符串,您需要使用十六进制编辑器检查文件中的确切格式。

然而,您可以首先使用calloc将缓冲区设置为\ 0,然后将文本放在那里,以确保缓冲区是\ 0终止的。