在C中自动检测操作系统并处理其特定的换行符
有没有一种方法可以检测操作系统,其中C代码被编译以处理文本文件中的特定换行字符?例如,我在Windows计算机上编译代码,它应该使用\r\n作为文本文件中的换行符,在Linux上它应该只使用\r\n 我需要一个程序,它应该读取二进制文本文件,并将文件的子字符串与其他字符串匹配。这应该可以在windows和Linux上运行在C中自动检测操作系统并处理其特定的换行符,c,linux,windows,text-files,newline,C,Linux,Windows,Text Files,Newline,有没有一种方法可以检测操作系统,其中C代码被编译以处理文本文件中的特定换行字符?例如,我在Windows计算机上编译代码,它应该使用\r\n作为文本文件中的换行符,在Linux上它应该只使用\r\n 我需要一个程序,它应该读取二进制文本文件,并将文件的子字符串与其他字符串匹配。这应该可以在windows和Linux上运行 谢谢你的帮助 最好的方法是检查预定义的宏和#ifdef。 可以使用命令打印所有预定义的宏 gcc -dM -E - < /dev/null gcc-dM-E-
谢谢你的帮助 最好的方法是检查预定义的宏和#ifdef。 可以使用命令打印所有预定义的宏
gcc -dM -E - < /dev/null
gcc-dM-E-
和grep代表“LINUX”或“WIN32”
我希望找到在LINUX机器上定义的LINUX,以及在windows机器上定义的WIN32。您不需要知道本机存储格式。读取文件时,您无法知道它是否是在Windows、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
),但即使是这样也能正确处理。如果你只是在读取文件;只需忽略(过滤掉)任何\r
,只使用\n
(这也允许您在Windows上读取*nix文件,在*nix上读取Windows文件)。您只需要关心写入文件(但在这种情况下,通常您可以在读取时自动检测,并在写入时执行相同的操作)。我曾考虑过使用宏,但这不是很舒服,因为这样我必须连接字符串,不能在字符串中使用\n…谢谢brendan,这可能是解决方案谢谢!这将有很大帮助