You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++打印char类型内存地址出现异常输出,原因是什么?

问题原因与解决办法

为什么会输出乱码?

你打印&givenChar的时候,这个表达式的类型是char*(指向char的指针)。C++里的std::cout对char*有特殊处理逻辑——它会把这个指针当作C风格字符串的起始地址,从该地址开始逐个打印字符,直到碰到字符串结束符'\0'才停止。

但你的givenChar变量后面的内存区域并没有被初始化为合法的C风格字符串(没有'\0'终止符),所以cout会持续读取后续内存中的随机数据,直到碰巧遇到'\0',这就导致了输出乱码。

而其他变量(int、float、double、std::string)的地址是int*、float*这类非char指针类型,std::cout对这类指针没有特殊重载,会默认转换为void*并输出十六进制内存地址,所以显示正常。

解决方法

要正确输出givenChar的内存地址,只需将char*强制转换为void*,让cout按通用指针的规则输出地址:

std::cout << static_cast<void*>(&givenChar) << std::endl;

修改后,&givenChar会输出和其他变量格式一致的十六进制地址,不会再出现乱码。

内容的提问来源于stack exchange,提问作者FluidMechanics Potential Flows

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 19:50:01