[问题] char pointer问题

楼主: b90022790 (柚子拉拉)   2019-11-12 01:18:53
开发平台(Platform): (Ex: Win10, Linux, ...)
Arch Linux
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)

问题(Question):
char a='a';
char *ptr=&a;
cout<<ptr;
预期的正确结果(Expected Output):
基于以下程式码:
char a[]="hello world";
char *ptr=&a;
cout<<ptr;
会输出hello world,因此猜测该问题应该输出a
错误结果(Wrong Output):
a?????(?为乱码)
补充说明(Supplement):
因平常写code不常使用char的pointer,突然同学问了character相关的问题就卡住了。
因转换为void*的address看起来都正常,
因此目前个人猜测是因为转换时因a宣告并非array,因此只有1byte,
只有记下'a',而没有记下'\0',因此造成ptr读取错误。
求各位前辈指点迷津!!谢谢各位!!
作者: Lipraxde (Lipraxde)   2019-11-12 01:46:00
不是 "ptr读取错误",ostream 会把 pointer to char 当字串输出&a 是取 a 的位置,不是什么转换
作者: harryooooooo (真_终极萝莉控Ecstasy_)   2019-11-12 08:40:00
ostream遇到char*的时候会一个char一个char按照内存里的顺序输出,直到遇见'\0'为止。在你的情况里那些乱码就是char a在内存中后面跟着的东西,跟变量没初始化的垃圾值是差不多的东西另外hello world会正常输出并不是因为他是array,而是“"hello world"”这个表达式本身就含有一个'\0',总长度是12

Links booklink

Contact Us: admin [ a t ] ucptt.com