我有一个在运行时收到的带有 DOS 行结尾的文件,因此我无法将行结尾转换为 UNIX 样式脱机。另外,我的应用程序可以在 Windows 和 Linux 上运行。我的应用程序做了一个fgets()
文件并尝试逐行读取。
Linux 上每行读取的字节数是否也占 2 个尾随字符(\r \n)
或者它只包含(\n)和\r会被底层系统丢弃吗?
EDIT:
好吧,在 Linux 上读取文件时行结尾会被保留,但我遇到了另一个问题。在 Windows 上,以“r”或“rb”打开文件的行为有所不同。与 Linux 不同,Windows 是否区别对待这两种模式?
fgets()
保留行结尾。
http://msdn.microsoft.com/en-us/library/c37dh6kf(v=vs.80).aspx
fgets()
它本身没有任何转换行结尾的特殊选项,但在 Windows 上,您可以选择以“二进制”模式或“文本”模式打开文件。在文本模式下,Windows 将 CR/LF 序列(C 字符串:“\r\n”)转换为换行符(C 字符串:“\n”)。这是一个功能,您可以为 Windows 和 Linux 编写相同的代码并且它可以工作(在 Windows 上不需要“\r\n”,在 Linux 上只需要“\n”)。
http://msdn.microsoft.com/en-US/library/yeby3zcb(v=vs.80)
请注意,Windows 调用fopen()
采用与调用相同的参数fopen()
在Linux中。 “二进制”模式需要一个非标准字符('b'
)在文件模式下,但默认为“文本”模式。所以我建议你在 Windows 和 Linux 上使用相同的代码行; Windows 版本fopen()
就是为此而设计的。
Linux 版本的 C 库没有任何棘手的功能。如果文本文件有 CR/LF 行结尾,那么这就是您阅读时得到的结果。 Linuxfopen()
将接受一个'b'
在选项中,但忽略它!
http://linux.die.net/man/3/fopen
http://linux.die.net/man/3/fgets
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)