【发布时间】:2025-12-29 17:00:06
【问题描述】:
我的代码是这样的:
#include <iostream>
using std::cout;
using std::endl;
int main(int argc, char *argv[])
{
cout << (int)('\0') << endl;
cout << (char)(0) << endl;
return 0;
}
我希望在终端中看到这样的:
$ test-program
0
$
然而,我看到的是这样的:
$ test-program
0
^@
$
让我感到困惑的是,我认为'\0' 可以转换为0。并且0 也可以转换为\0。我预计会看到一个空字符,后跟一个endl,但结果有点奇怪,比如^@。
有人对此有想法吗?
【问题讨论】:
-
我在 Windows 中得到了预期的结果(使用 MinGW gcc 编译)。
-
使用
| hexdump -C查看十六进制输出。通过这种方式,您可以确保 您的程序 执行您期望它执行的操作,因此它的 终端 的行为与(您)预期的不同。 -
这是 c++,然后类型很重要。在第一种情况下,必须显示整数 0,然后将 0 转换为测试“0”。在第二种情况下,它是一个真正的字符 0,它实际上是一个字符 0。.test-programm > 结果。将 emacs 与 --hexl-mode 一起使用,它将确认这一点。第二点是可以变化的字符 0 的终端显示,在您的情况下,字符 0(通常不应该显示,因为在 C 中它以字符串结尾)将显示为 ^@.