字元陣列 一般以\0結尾
如果嘗試不以\0結尾 會發生什麼呢?
如圖,在vscode裡,環境是mingw64的 gdb,輸出c2時,把c2和c1放在一起輸出了,有點詭異
去vs裡除錯一下
如圖,字元陣列的位址值 應該是 首元素的位址
執行時 c2 的輸出 直接亂碼了
等等 應該是c2輸出的時候 沒有遇到\0,所以直接往後找到了c1的\0才結束
那那些亂碼是什麼呢?
每個字元在記憶體裡應該長度是1,為啥中間隔了6個長度呢
然後我想看看c2裡每個元素的位址是撒子
像這樣
char
* p =
&c2[0]
;char
* p2 =
&c2[1]
;char
* p3 =
&c2[2]
; cout << p << endl;
cout << p2 << endl;
cout << p3 << endl;
然後發現輸出是這樣的
然後我又去尋找原因
發現 c ++裡 cout把char*當做 c字串處理一直輸出直到\0。
然後只能printf
像這樣
printf
("%x\n"
,&c2[0]
);printf
("%x\n"
,&c2[1]
);printf
("%x\n"
,&c2[2]
);printf
("%x\n"
,&c1[0]
);printf
("%x\n"
,&c1[1]
);
果然
倆陣列在記憶體裡是挨著的,但不是緊挨著的,這樣的話輸出c2才能找到c1的\0
這應該是vs的特性吧,在dev裡輸出c2只會輸出abc
那c2[2] 到 c1[0] 這隔的3個長度的記憶體
到底存了啥呢。。。
為啥每次輸出都是燙燙燙的亂碼
有沒有人解答一下,學不會了
字串指標和字元陣列的詭異問題
背景 qt程式設計,datetimeedit是乙個qcombobox下拉列表控制項,從中讀取事件日期轉換為char 型別,eventlogmessage.shartdatetime是char 型別。這是最原始的實現方法 qdatetime dd ui datetimeedit datetime qs...
詭異的C程式
include int main 結果是 you got died 解釋 1 night 就是 night 1 也就是 i ascii碼為105 類似,2 girls 是 l 114 4 allnight 是 i 105 result 105 114 105 256 43 result of you...
C 詭異程式
using system using system.collections.generic using system.windows.forms using system.runtime.interopservices using system.threading using system.medi...