[英]C++ - Cross-platform newline character in string
当字符串中需要换行时,我使用\n
字符
int main()
{
string str = "Hello world\n";
}
\n
是跨平台的吗? 还是我需要使用宏来适应平台的价值?
特别是当str
将被写入文件或标准输出时。
只要您在文本模式下读/写文本流或文件, \n
就会被转换为平台的正确序列。
此外,如果您需要在 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.