【问题标题】:fgets dont return NULL when no new line found找不到新行时 fgets 不返回 NULL
【发布时间】:2010-11-30 22:04:00
【问题描述】:

我正在使用 while 循环:

while(fgets(pclientRow, 1024 , f) != NULL)

在其他课程中它工作正常,但在其中一个课程中,当我阅读时 逐行文件,即使行结束也不会退出循环,我在调试器中看到了。

为什么?它甚至在那个班级之前也有效,现在我不知道为什么它会一直带来 空行直到它崩溃..

有什么想法吗?

【问题讨论】:

  • 发布一些代码。另请注意,C 没有类。
  • feof(f)ferror(f)errno (Unix) / GetLastError() (Windows) 的值是什么? ?
  • 了解正在读取的文件有多大(以字节和行为单位)以及当它“崩溃”时究竟会发生什么也会很有用。
  • 抱歉 fgets 没有崩溃,它再次进入循环,因为 fgets 没有返回 null,然后它就崩溃了..
  • @Zack: fgets() 是一个标准库函数,所以即使在 Windows 中它也会设置 errno。

标签: c crash new-operator line fgets


【解决方案1】:

标准 ANSI C 函数中的 fgets,请参阅文档: 这里 fgets 读取最大值。到下一个 '\n' 或 EOF 为止的 1023 个字符。 您的行长于 1023 个字符或最后一行没有终止换行符。

【讨论】:

    【解决方案2】:

    您可以通过在 while 循环中放置类似的内容来捕获 \n 问题。

    if((int)strlen(pclientRow) == 1) 休息;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-05
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多