繁体   English   中英

C ++ - 字符串中的跨平台换行符

[英]C++ - Cross-platform newline character in string

当字符串中需要换行时,我使用\n字符

 int main()
 {
     string str = "Hello world\n";
 }

\n是跨平台的吗? 还是我需要使用宏来适应平台的价值?

特别是当str将被写入文件或标准输出时。

只要您在文本模式下读/写文本流或文件, \n就会被转换为平台的正确序列。

http://en.cppreference.com/w/c/io

此外,如果您需要在 Unix 中读取保存在 Windows 中的文件,反之亦然,您可以使用这个:

std::getline(fileName,inputStr);
inputStr.erase( std::remove( inputStr.begin(), inputStr.end(), '\r' ), inputStr.end() );
inputStr.erase( std::remove( inputStr.begin(), inputStr.end(), '\n' ), inputStr.end() );

它将删除所有\r\n

另一种说法是\n是编译器的跨平台。 它将在所有平台上编译并为平台生成正确的输出。 但是输出并不是真正的跨平台,因为文本中的换行在不同的平台上是不同的。 所以阅读需要额外的处理才能独立于平台。

这里的部分混淆是其中带有\n的字符串实际上就是 - 带有 LF 字节的字符串。

当考虑以正常(即非二进制模式)读取和写入流时,跨平台性进入等式。

流对象将\n转换为\n\r\r\n ,具体取决于已编译可执行代码的平台。

至少这是我对情况的理解,如果我对此有错误,请纠正我。 过去我不必担心太多,因为我通常专门为 Linux 系统编写代码。

认为我应该添加这个,因为这个问题并没有真正的意义,尽管我明白你在问什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM