clang++ 和 g++ 编译器在打印 char 指针时给出不同的输出
#include <iostream>
int
main(int argc, char** argv){
char a = 'a';
char* aptr = &a;
std::cout << aptr << " : " << a << std::endl;
return 0;
}
当我使用 g++ 编译代码时,它给出了输出:
a : a
但是当我使用 clang++ 编译时,它给出了输出:
a�w�� : a
我认为 clang 编译输出中“a”前面的值是垃圾值。
还有一件事,如果我没记错的话,指针应该存储内存地址。那么为什么在这种情况下,当我打印字符的内存地址时,它给了我字符本身?
我正在使用 wsl,这些是我用来编译代码的编译器版本:
Ubuntu clang version 18.1.3 (1)
g++ (Ubuntu 13.2.0-23ubuntu4) 13.2.0
您使用的
operator<<(const char*)
采用以 null 结尾的字符串。但是您传递了 aptr
,它不是指向以 null 结尾的字符串的指针。
这是未定义的行为。任何事情都可能发生。预计会有不同的结果。