[問題] char pointer問題

看板C_and_CPP (C/C++)作者 (PomeloLaLa)時間5年前 (2019/11/12 01:18), 5年前編輯推噓0(0010)
留言10則, 2人參與, 5年前最新討論串1/1
開發平台(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

11/12 01:46, 5年前 , 1F
不是 "ptr讀取錯誤",ostream 會把 pointer to char 當
11/12 01:46, 1F

11/12 01:46, 5年前 , 2F
字串輸出
11/12 01:46, 2F

11/12 01:47, 5年前 , 3F
&a 是取 a 的位置,不是什麼轉換
11/12 01:47, 3F
是的 關於轉換一詞需要作修正,但我知道會把pointer當chat,我的問題點是為何輸出會不只輸出內容,額外有亂碼 ※ 編輯: b90022790 (163.22.18.53 臺灣), 11/12/2019 07:57:36

11/12 08:40, 5年前 , 4F
ostream遇到char*的時候會一個char一個char按照記憶
11/12 08:40, 4F

11/12 08:40, 5年前 , 5F
體裡的順序輸出,直到遇見'\0'為止。在你的情況裡那
11/12 08:40, 5F

11/12 08:40, 5年前 , 6F
些亂碼就是char a在記憶體中後面跟著的東西,跟變數
11/12 08:40, 6F

11/12 08:40, 5年前 , 7F
沒初始化的垃圾值是差不多的東西
11/12 08:40, 7F

11/12 08:45, 5年前 , 8F
另外hello world會正常輸出並不是因為他是array,而
11/12 08:45, 8F

11/12 08:45, 5年前 , 9F
是「"hello world"」這個表達式本身就含有一個'\0'
11/12 08:45, 9F

11/12 08:45, 5年前 , 10F
,總長度是12
11/12 08:45, 10F
好的 非常謝謝您的幫忙!! 講解的非常清楚!已經了解原因了!謝謝! ※ 編輯: b90022790 (163.22.18.106 臺灣), 11/12/2019 08:55:01
文章代碼(AID): #1ToPW1pF (C_and_CPP)
文章代碼(AID): #1ToPW1pF (C_and_CPP)