用 s方法輸入超過字元陣列大小的字串

2021-09-30 01:25:39 字數 1196 閱讀 7584

在陣列a中本來最多只能存有效字元為3個的字串。但是當我輸入hello時仍然可以正常輸出。

這可能是因為scanf("%s",a)只管把敲回車或者得到空格之前的所有字元依次存到位址a中,而printf("%s\n",a)又只管把a開始』\0』結尾的字串行以字串形式輸出。所以不會受到一開始決定的陣列大小的影響。

想象中,此時計算機裡等價地存著a[0]~a[5]分別是』h』 『e』 『l』 『l』 『o』 『\0』

因此如果設定a[4]=『e』(注意原來字元陣列中沒有a[4]這個元素),輸出的將會是helle

那如果把a[5]修改掉,字串結束符就沒有了,會發生什麼呢?

並沒有發生無窮無盡的輸出,而是很淡定地在a[5]處新增了乙個e(或許編譯器在後面補了乙個』\0』?真是令人困惑啊。)

在字串庫函式strcpy中有類似的發現

#include

#include

intmain()

如果a有初始值,不管b是比a長還是短,都會覆蓋。這是因為在把字串b移入a的時候,把boy後面跟的』\0』也帶了進來。所以是a的h、e、l、l、o、\0的前四個被b、o、y、\0替換,a變成了b、o、y、\0、o、\0

所以只要我們把a[3]換掉,就可以出現a[4]的o

字元陣列的輸入

作用 把輸入的一行作為乙個字串傳送到字元陣列中特點 以空格 回車為結束標誌,自動加 0 char str 10 cin str 作用 接收從鍵盤輸入的單個字元資料 輸入多個字元時,只接收第乙個 特點 可以接收回車字元陣列呼叫時 要用到迴圈,不會自動加 0 char str 10 for i 0 i ...

字元陣列大小的判斷

include include intmain printf d n sizeof arr sizeof計算陣列的大小,char型別為乙個位元組,6 1 6 printf d n sizeof arr 0 arr為首元素位址,arr 0依然是首元素位址,為4 8 printf d n sizeof ...

陣列 字串的大小

首先,先看這樣一段程式 include int main printf p n arr printf d n arr return 0 執行的結果 這裡,printf p n arr 指的是列印陣列arr的首元素arr 0 的位址,為00d5f14 printf d n arr 指的是列印指向陣列a...