有没有办法检测C代码编译的操作系统,以处理它在文本文件中的特定换行符? 例如,我在Windows机器上编译我的代码,它应该使用\ r \ n作为文本文件中的换行符,在Linux上它应该只用\ n。
我需要这个程序,它应该读取文本文件的二进制和匹配与其他string的文件的子串。 这应该在Windows和Linux上工作。
谢谢你的帮助!
您不需要知道本机存储格式。 读取文件时,无法知道它是在Window,Linux还是其他系统上创建的 – 可以在另一个系统上创建,而不是在您正在使用的系统上创建。 在编写时 ,您的程序将为您的操作系统使用本地库,并输出它认为适合于\n
任何内容。
读取文本文件行结束agnostically归结为:
\r
或\n
。 \r
,跳过所有的下一个\n
; \n
,请稍后跳过\r
。 这将适用于\n
(Linux和其他类Unix操作系统,如Mac OS X),Windows \r\n
和仅以\r
结尾的旧版Mac OS文件的行结尾。 这涵盖了您可能遇到的所有“普通”文本文件的大约99.99%。 曾经是一个非常罕见的使用\r\n\n
(或可能\n\r\r
),但即使这将被正确处理。
最好的办法是检查一个预定义的宏和#ifdef就可以了。 您可以使用该命令打印所有预定义的MACRO
gcc -dM -E - < /dev/null
grep为“LINUX”或“WIN32”
我期望找到在Linux机器上定义的_ LINUX _和在Windows机器上定义的_ WIN32 _。