作者b90022790 (PomeloLaLa)
看板C_and_CPP
标题[问题] char pointer问题
时间Tue Nov 12 01:18:53 2019
开发平台(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读取错误。
求各位前辈指点迷津!!谢谢各位!!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 163.22.18.53 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1573492737.A.CCF.html
1F:→ Lipraxde: 不是 "ptr读取错误",ostream 会把 pointer to char 当11/12 01:46
2F:→ Lipraxde: 字串输出11/12 01:46
3F:→ Lipraxde: &a 是取 a 的位置,不是什麽转换11/12 01:47
是的 关於转换一词需要作修正,但我知道会把pointer当chat,我的问题点是为何输出会不只输出内容,额外有乱码
※ 编辑: b90022790 (163.22.18.53 台湾), 11/12/2019 07:57:36
4F:→ harryooooooo: ostream遇到char*的时候会一个char一个char按照记忆11/12 08:40
5F:→ harryooooooo: 体里的顺序输出,直到遇见'\0'为止。在你的情况里那11/12 08:40
6F:→ harryooooooo: 些乱码就是char a在记忆体中後面跟着的东西,跟变数11/12 08:40
7F:→ harryooooooo: 没初始化的垃圾值是差不多的东西11/12 08:40
8F:→ harryooooooo: 另外hello world会正常输出并不是因为他是array,而11/12 08:45
9F:→ harryooooooo: 是「"hello world"」这个表达式本身就含有一个'\0'11/12 08:45
10F:→ harryooooooo: ,总长度是1211/12 08:45
好的 非常谢谢您的帮忙!!
讲解的非常清楚!已经了解原因了!谢谢!
※ 编辑: b90022790 (163.22.18.106 台湾), 11/12/2019 08:55:01