有没有办法检测编译C代码的操作系统,以便在文本文件中处理特定的换行符?例如,我在Windows机器上编译我的代码,它应该使用\ r \ n作为文本文件中的换行符,在Linux上它应该只使用\ n。
我需要这个程序,它应该读取文本文件二进制文件并匹配文件的子串与其他字符串。这应该适用于Windows和Linux。
感谢您的帮助!
答案 0 :(得分:2)
您不需要知道本机存储格式。当读取文件时,您无法知道它是在Window,Linux还是其他系统上创建的 - 它可以在您正在处理的系统之外的其他系统上创建。当写时,您的程序将使用您的操作系统的本机库并输出它认为适合\n
的任何内容。
以非法方式阅读文本文件行结尾归结为:
\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
),但即使这样也会正确处理。
答案 1 :(得分:1)
最好的方法是检查预定义的宏和#ifdef。 您可以使用命令
打印所有预定义的MACROgcc -dM -E - < /dev/null
和grep for&#34; LINUX&#34;或&#34; WIN32&#34;
我希望在Linux机器上找到_ LINUX _,在Windows机器上定义_ WIN32 _。