代码之家  ›  专栏  ›  技术社区  ›  Tanj

fgets()linux与mac

  •  3
  • Tanj  · 技术社区  · 16 年前

    我不想编写库类型函数来处理交叉兼容性问题。有没有另一个我可以使用的标准函数?

    6 回复  |  直到 16 年前
        1
  •  4
  •   Matt Joiner    16 年前

    如果严格遵守C,可以尝试使用 getdelim()

        2
  •  4
  •   Carl Smotricz    16 年前

    哦,等等,我错过了“在linux上运行”和“一个mac文件有CR”。

    好的,答案是:这个 fgets() 文档明确地将“换行符”称为行终止符。尤其是Unix/Linux实现不能指望听说旧Mac将CR作为线路终止器的概念;所以这并不奇怪 fgets 没有将这些CRs视为行结束。

    更新:

    我强烈建议避免大部分问题,使用命令行实用程序,如 tr

        3
  •  1
  •   Jonathan Leffler    16 年前

    您是在谈论MacOS X还是MacOS 9(或更早版本)?

    • 在MacOS 9或更早版本上,库将在“\r”处停止。
        4
  •  1
  •   gary    16 年前

    你愿意仅仅为了处理Mac风格的行尾而修改代码吗?您永远不会处理正常的Unix行结尾吗?或者您想要一个接受任何一种样式的函数?这是不合理的。

    为什么不将所有有问题的文件通过TR传输,将CR更改为LF,然后读取管道呢。无需创建其他文件。无论原始文件是否有CRs,代码都将与标准FGET一起使用。

        5
  •  1
  •   Brian Campbell Dennis Williamson    16 年前

    当Mac从Mac OS 9移动到Mac OS X时,行结束约定从以 \r 到 \n ,因为Mac OS X构建在BSD之上 fgets 将分析由分隔的行 \n 不 \r .

    \r ,您必须自己执行此操作,或将文件转换为 \n

        6
  •  0
  •   Jonathan Leffler    16 年前

    Mac上的C库应该“做正确的事情”。

    顺便说一句,Linux和Mac都使用\n作为行终止符,而不是\r\n