确定正在编译C ++程序的环境的换行符

时间:2011-07-28 19:49:21

标签: c++ newline

如何在C ++中确定环境换行符 1 ? Google为C#和.NET提供了许多结果,但我没有看到任何方法为非CLI C ++做到这一点。

其他信息:我需要扫描一个const char*字符。

1 “环境换行符”是指Windows上的\r\n,Linux上的\n和Mac上的\r

3 个答案:

答案 0 :(得分:6)

std::endl插入适合系统的换行符。您可以使用ostringstream在运行时将换行符序列确定为字符串。

#include <sstream>

int main()
{
    std::ostringstream oss;
    oss << std::endl;
    std::string thisIsEnvironmentNewline = oss.str();
}

编辑:*请参阅以下评论,说明为什么这可能不起作用。


如果您知道您的平台将仅限于Windows,Mac和Unix,那么您可以使用预定义的编译器宏(listed here)来确定编译时的结束序列:

#ifdef _WIN32
    #define NEWLINE "\r\n"
#elif defined macintosh // OS 9
    #define NEWLINE "\r"
#else
    #define NEWLINE "\n" // Mac OS X uses \n
#endif

大多数非Windows和非Apple平台都是使用\n的某种Unix变体,因此上述宏应该适用于许多平台。唉,我不知道在编译时为所有可能的平台确定最终序列的任何可移植方式。

答案 1 :(得分:4)

对于C ++(和C)中的格式化文本IO,新行字符始终为'\n'。如果您想知道给定平台和文件模式的新行的二进制表示,请以所需模式打开文件(例如,文本或二进制,UTF-8,UTF-16,MCBS等),写出'\n',关闭它,以二进制形式重新打开它,读入整个文件,并找出'\n'的实际二进制编码。您可能还需要考虑end-of-file字符。

答案 2 :(得分:1)

通常使用#define。但是,对于简单的应用程序,以“文本模式”打开文件将为您提供所需的信息。