空格vs空字符

use*_*460 3 c++ null space

在C++中,当我们需要打印单个空格时,我们可能会执行以下操作:

cout << ' ';
Run Code Online (Sandbox Code Playgroud)

或者我们甚至可以使用转换后的ASCII代码来表示空间:

cout << static_cast<char>(32); //ASCII code 32 maps to a single space
Run Code Online (Sandbox Code Playgroud)

我意识到,打印空字符也会导致打印一个空格.

cout << static_cast<char>(0); //ASCII code 0 maps to a null character
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:所有C++编译器都是通用的,当我打印时static_cast<char>(0),它总是在显示器中显示为单个空格吗?

如果它是通用的,当我使用文件输出流时它是否适用于文本文件?

Csq*_*Csq 8

不,它在每个编译器中都是零(0)字符.似乎您使用的字体将零字符渲染为空格.例如,在过去,DOS有一个不同的图像(一个几乎填充的矩形)为零字符.

无论如何,你真的不应该输出零个字符而不是空格!

对于文本文件部分:使用十六进制编辑器打开输出的文件以查看写入的实际位.你会看到那里的差异!


Kon*_*lph 5

在我的电脑上,这段代码

#include <iostream>
int main() {
    std::cout << "Hello" << static_cast<char>(0) << "world\n";
}
Run Code Online (Sandbox Code Playgroud)

输出这个:

Helloworld
Run Code Online (Sandbox Code Playgroud)

所以不,它显然不起作用。