c 詭異的字元陣列

2021-10-07 19:19:22 字數 1412 閱讀 6412

字元陣列 一般以\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...