在C中读取文件时出现分段错误

时间:2017-02-03 15:31:06

标签: c

我尝试在C上逐个字符地读取文件,我得到分段错误,不知道为什么以及如何调试它..

int textdump(const char *filename)
{
    int count = 0;

    FILE *file;

    file = fopen(filename,"r");
    char letter;
    while(!feof(file)) {
        letter = fgetc(file);
        if (isprint(letter)) {
            printf("%c",letter);
            count++;
        }
        else {
            printf("?");
        }

    }
    fclose(file);
    return count;
}

1 个答案:

答案 0 :(得分:2)

好的,所以你的代码有一堆在初学者代码中很常见的错误。

以下是如何按照相同的方式执行此操作,但希望能够修复错误:

size_t textdump(const char *filename)
{
    size_t count = 0;

    FILE * const file = fopen(filename, "rt");
    if(file == NULL)
      return 0;
    while (1) {
      const int ch = fgetc(file);
      if(ch == EOF)
        break;
      if(isprint(ch) {
        putc(ch, stdout);
        ++count;
      }
      else
        putc('?', stdout);
    }
    fclose(file);
    return count;
}

此:

  • 在依赖文件指针有效之前检查fopen()是否成功。
  • 使用fgetc()的返回值的正确类型,即int
  • 更正while(!feof()反模式。
  • 使用fputc()表示单字符输出,轻于printf()
  • 使用size_t代表计数。

我不是说这是最佳,它仍然会进行单字符读取(但是缓冲所以它不应该太糟糕)。但它应该更好。