首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用<iostream>打印指针

使用<iostream>打印指针
EN

Stack Overflow用户
提问于 2012-08-01 06:07:44
回答 3查看 5.9K关注 0票数 7

为什么

代码语言:javascript
复制
#include <iostream>
using namespace std;

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

segfault,但是

代码语言:javascript
复制
#include <iostream>
using namespace std;

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

看起来还不错吧?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-01 06:08:38

因为

代码语言:javascript
复制
cout::operator <<(void*) 

打印内存地址,然后

代码语言:javascript
复制
cout::operator <<(char*)

打印以null结尾的字符数组,并且在尝试从0x10读取char数组时遇到未定义的行为。

票数 9
EN

Stack Overflow用户

发布于 2012-08-01 06:09:36

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

票数 4
EN

Stack Overflow用户

发布于 2012-08-01 06:09:00

char*<<提供了一个特殊的重载,因此可以轻松地输出C样式的字符串。

因此

代码语言:javascript
复制
cout << (char*)0x10 << endl; 

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11749725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档