作者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/m.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