gpt4 book ai didi

c - 如何检测来自不同操作系统的文本文件的行结尾?

转载 作者:行者123 更新时间:2023-12-02 08:54:59 25 4
gpt4 key购买 nike

在 C 语言中,我通常一次读取一个字符的文本文件(例如,在 FSM 循环中,同时进行标记化和解析)。不幸的是,一些操作系统使用不同的方法来标记行尾,例如Unix ("\n")、Mac OS ("\r") 和 DOS/Windows ("\r\n")。

因此我的问题是:如何正确检测来自不同操作系统的文本文件的行结尾?

我当前的方法是将 '\r' 视为 '\n' 并忽略空行。不幸的是,这种方法只有在空行不改变底层文本的语义的情况下才有效。

我不想“检测”每个文件的行结束样式,而且我当然不想要基于 #ifdef 或其他类型的条件编译的解决方案。还有有效的解决方案吗?

最佳答案

我通常不建议一次读取一个文件一个字符,但对于您的情况,我建议您使用以下逻辑“窥视”一个字符......

if c == '\r'
p = peek
if p == '\n'
read next c

您不能真正相信所有文件都具有一定的相似性,甚至一个文件本身遵循相同的约定,因此您应该针对所有情况进行编码。在这种情况下,如果您看到\r,您可能会看到\n,如果您确实消耗了下一个字符并继续前进。

关于c - 如何检测来自不同操作系统的文本文件的行结尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5601581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com