编译器在打印 char 指针时出现分歧[重复]

问题描述 投票:0回答:1
#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
c++ pointers g++ clang
1个回答
0
投票

您使用的

operator<<(const char*)
采用以 null 结尾的字符串。但是您传递了
aptr
,它不是指向以 null 结尾的字符串的指针。

这是未定义的行为。任何事情都可能发生。预计会有不同的结果。

© www.soinside.com 2019 - 2024. All rights reserved.