- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
最近我在处理一些字符串、文本输入等类似的东西,我意识到我对 2 个字符——LF(10) 和 CR(13) 有点困惑。每次我需要开始新行时,我都使用 std::endl 表示 C++ 字符串,而\n 是表示 C 字符串的 LF。但是,我现在使用的是一个库,该库在返回键时向我发送的不是 LF 而是 CR 键码。我在维基百科上看到用法如下:
CR+LF: Microsoft Windows, DEC TOPS-10, RT-11 and most other early non-Unix and non-IBM OSes, CP/M, MP/M, DOS (MS-DOS, PC-DOS, etc.), Atari TOS, OS/2, Symbian OS, Palm OS
LF+CR: Acorn BBC spooled text output.
CR: Commodore 8-bit machines, Acorn BBC, TRS-80, Apple II family, Mac OS up to version 9 and OS-9
LF: Multics, Unix and Unix-like systems (GNU/Linux, AIX, Xenix, Mac OS X, FreeBSD, etc.), BeOS, Amiga, RISC OS, and others.
RS: QNX pre-POSIX implementation.
但我从来没有真正注意到 Windows 上需要 CR,无论如何都会在正确的位置打印所有内容。 CR,再次根据维基百科,在打字机时代用于将书写头返回到行的开头,然后使用 LF 滚动一行到下面。
我的问题是现在是否真的有必要使用 CR,为什么。如果仅使用 LF,哪些系统可能无法正确输出文本?打印机是否仍需要 CR,如果需要,操作系统是否会自动将 LF 解释为新行并返回到行首,或者 CR 必须仍硬编码在我发送以供打印的数据中?
最佳答案
在你的 C 和 C++ 程序中,你所需要的(至少,当只处理标准库时)是 \n
,当发送到任何 C/C++ 流时 打开文本模式(即当你没有在 fopen
和 ios::bin
中为 C++ 流指定 b
时),是自动翻译为当前平台的行终止符。这就是为什么在 Windows 上你可以将 \n
写入任何流,它会“神奇地”变成 CRLF 到文件中/在控制台上。
整个二进制/文本模式的存在就是为了这个目的:当你写一个文本文件时,有这种翻译是很有用的(这样在你的字符串中你可以只用 \n
作为行终止符不用担心特定的平台行终止符),但是当你写一个二进制文件时 \n
就像其他的一样只是一个字节,不应该被翻译,否则你会得到损坏的数据。
*仅使用 LF(即 \n
)的 NIX 系统实际上不进行任何转换,但出于可移植性/清晰性目的正确指定二进制/文本模式仍然很好。
在 C++ 中总是使用 endl
是一个常见的错误,\n
足以转换为特定于平台的行终止符。
endl
比 \n
做的更多的是刷新流缓冲区,这在某些有限的情况下很有用(例如,在长时间操作之前在控制台上输出一些东西),但通常只会减慢 IO 速度(在控制台上通常不明显,但在文件上却很明显)。我通常只使用 \n
并在实际需要刷新时添加 std::flush
。
这与标准库有关;在处理其他库 YMMV 时,您应该检查它们的文档以查看它们是否遵循标准 C 约定,或者它们是否需要字符串来包含特定于平台的行终止符。
关于c++ - 换行和回车,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7372012/
在 Vaadin 7.0,显示时JavaBean Table 中的数据与 BeanContainer ,用新数据刷新表的正确方法是什么? 最佳答案 该表通过监听器监视表项的属性。如果您通过表的 Ite
首先,我使用的是带有 Axis2 1.6.2 的 eclipse,我正在 tomcat 6 上部署我创建的 Web 服务。Web 服务是在 eclipse 中通过自上而下的方法创建的。 我被要求使对我
我已将 Rails 3.1.1 应用程序升级到 Rails 3.1.3,现在,对于每个请求,它仅响应错误数量的参数(3 for 1)。不幸的是,它没有说明错误在哪里,并且应用程序跟踪为空。我认为存在一
我是一名优秀的程序员,十分优秀!