[問題] 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