使用<iostream> </iostream>打印指针

时间:2012-07-31 22:07:44

标签: c++ iostream

为什么

#include <iostream>
using namespace std;

int main() {
  cout << (char*)0x10 << endl; 
}

segfault,但

#include <iostream>
using namespace std;

int main() {
  cout << (void*)0x10 << endl; 
}

似乎工作正常吗?

3 个答案:

答案 0 :(得分:8)

由于

cout::operator <<(void*) 

打印内存地址,

cout::operator <<(char*)

打印以空字符结尾的字符数组,当您尝试从char读取0x10数组时,会遇到未定义的行为。

答案 1 :(得分:3)

ostream::operator<<被重载,有一个version for char*将给定指针解释为以空字符结尾的字符串。

答案 2 :(得分:2)

<< char*有一个特殊的重载,因此可以轻松输出C风格的字符串。

因此

cout << (char*)0x10 << endl; 

尝试打印出位于(char*)0x10的字符串,该字符串不是它应该查看的内存。