看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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://www.ptt.cc/bbs/C_and_CPP/M.1573492737.A.CCF.html
Lipraxde: 不是 "ptr讀取錯誤",ostream 會把 pointer to char 當11/12 01:46
Lipraxde: 字串輸出11/12 01:46
Lipraxde: &a 是取 a 的位置,不是什麼轉換11/12 01:47
是的 關於轉換一詞需要作修正,但我知道會把pointer當chat,我的問題點是為何輸出會不只輸出內容,額外有亂碼 ※ 編輯: b90022790 (163.22.18.53 臺灣), 11/12/2019 07:57:36
harryooooooo: ostream遇到char*的時候會一個char一個char按照記憶11/12 08:40
harryooooooo: 體裡的順序輸出,直到遇見'\0'為止。在你的情況裡那11/12 08:40
harryooooooo: 些亂碼就是char a在記憶體中後面跟著的東西,跟變數11/12 08:40
harryooooooo: 沒初始化的垃圾值是差不多的東西11/12 08:40
harryooooooo: 另外hello world會正常輸出並不是因為他是array,而11/12 08:45
harryooooooo: 是「"hello world"」這個表達式本身就含有一個'\0'11/12 08:45
harryooooooo: ,總長度是1211/12 08:45
好的 非常謝謝您的幫忙!! 講解的非常清楚!已經了解原因了!謝謝! ※ 編輯: b90022790 (163.22.18.106 臺灣), 11/12/2019 08:55:01