确定环境a C+的换行符+;程序正在上编译 如何确定C++中的NeXLeNE1环境?谷歌为C++和.NET提供了很多结果,但是我没有看到任何方法来实现非CLI C++。

确定环境a C+的换行符+;程序正在上编译 如何确定C++中的NeXLeNE1环境?谷歌为C++和.NET提供了很多结果,但是我没有看到任何方法来实现非CLI C++。,c++,newline,C++,Newline,其他信息:我需要扫描const char*中的字符 1我所说的“环境新线”是指Windows上的\r\n、Linux上的\n、Mac上的\r。通常带有#定义。但是,对于简单的应用程序,以“文本模式”打开文件将提供您所需的内容。std::endl插入适合系统的换行符。您可以使用ostringstream在运行时将换行符序列确定为字符串 大多数非Windows和非Apple平台都是某种Unix变体,使用\n,因此上述宏应该可以在许多平台上工作。唉,我不知道在所有可能的平台上编译时的末端行序列的任何可

其他信息:我需要扫描
const char*
中的字符

1我所说的“环境新线”是指Windows上的
\r\n
、Linux上的
\n
、Mac上的
\r

通常带有#定义。但是,对于简单的应用程序,以“文本模式”打开文件将提供您所需的内容。

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


大多数非Windows和非Apple平台都是某种Unix变体,使用
\n
,因此上述宏应该可以在许多平台上工作。唉,我不知道在所有可能的平台上编译时的末端行序列的任何可移植的方式。< /P> < P>在C++(和C)中格式化的文本IO,新行字符总是“代码>”\n’/CODE。如果您想知道给定平台和文件模式下新行的二进制表示形式,请在所需模式下打开文件(例如,文本或二进制、UTF-8、UTF-16、MCBS等),写出
'\n'
,关闭它,以二进制重新打开它,读取整个文件,并找出
'\n'
的实际二进制编码。您可能还必须考虑文件结尾字符。

这是唯一的方法吗?我更喜欢在编译时执行此操作。@Seth:为什么您需要在编译时知道换行符的类型?@Remy,因为它在运行时不需要计算:)不过,我可能不得不满足于此。@Seth:您只需要计算一次换行符序列。这个计算可能需要不到一微秒的时间。@Emile,我很确定它将始终返回'\n'。“\n”到二进制的转换由基础文件流处理。字符串流不应转换边界语言环境以外的任何字符。这适用于具有面向流文件(如Unix、DOS和Windows)的系统,但不适用于面向记录的文件(如VM)。对于某些系统,行尾指示根本不会存储为字符序列。@Rob,当然可以,但谁还会使用VM?:)(j/k)更严重的是,这个问题在虚拟机中有意义吗?为什么输出“本地”新行是必要的?我希望人们停止污染世界,不要以为“\r\n”是windows上的新词。windows上几乎每一个文本编辑器都会处理“\n”Just find。我听说过的唯一反例是记事本!这个问题让我产生了另一个疑问:@Andre谁说过关于输出的事情?@André:我一直想知道为什么记事本会认为它是一台打字机。在这个时代,回车符是没有用的。
#include <sstream>

int main()
{
    std::ostringstream oss;
    oss << std::endl;
    std::string thisIsEnvironmentNewline = oss.str();
}
#ifdef _WIN32
    #define NEWLINE "\r\n"
#elif defined macintosh // OS 9
    #define NEWLINE "\r"
#else
    #define NEWLINE "\n" // Mac OS X uses \n
#endif