【问题标题】:How to detect the newline character with gzgetc in c/c++如何在 c/c++ 中使用 gzgetc 检测换行符
【发布时间】:2020-06-29 13:56:48
【问题描述】:

我想使用 gzgetc 逐个字符地读取文件的整行,并在遇到换行符时停止。我知道有一个功能可以抓取整条线,但我想先尝试这样做。我试过了:

Int c;

do {
  c = gzgetc((gzFile) fp);
  cout << c;
} while (c != '\n');

结果是一个无限循环。我尝试在 c 之前添加 (char),结果仍然相同。我究竟做错了什么?我试图读取的数据文件以 base64 编码,我想读取以空格分隔的每个令牌。有些行是可变长度的,混合了编码和未编码的数据,我设置了一个算法,我只需要知道如何在换行处停止。

【问题讨论】:

  • 什么是fp...?
  • 文件描述符
  • 你是怎么得到的?
  • 请创建一个minimal reproducible example
  • 不应该fp 已经是gzFile(由gzopen 返回)吗?为什么需要投射它?请注意,gzgetc 在错误或文件结束时返回 -1,因此您应该检查一下。

标签: c++ c file-io zlib


【解决方案1】:

您还需要检查gzgetc() 返回-1,这表示错误或文件结束,并在这种情况下退出循环。您的无限循环可能是由于其中之一。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多