華清遠見嵌入式學院講師。
關於陣列的越界問題由來已久,大部分人比較困惑的地方是在申請記憶體空間時。下面先來看乙個例子:
在這個例子中呢,陣列buf申請了10個空間,資料通過標準輸入存到buf中,然後列印出buf中的內容。
編譯、執行。
第一次輸入,我輸入9個數:
可以正確輸出,沒有問題。
但是,當我輸入10個數時:
問題就來了,提示出現了越界問題。但是輸入的資料一樣會被列印出來,這是為什麼呢?
實際上,buf申請了10個空間,這是buf自己的,但是只可以存入9個資料,留乙個存『\0』結束符,裡面的資料是受保護的。在buf申請的空間後面也是可以存資料的,所以申請了10 個空間,輸入10個及以上的資料也是可以列印出來的,但是越界的資料是不受保護的。假如此時正好有程式申請了這段記憶體空間,buf中越界的資料就會被覆蓋,導致資料丟失。一般,為了保證資料的安全性,申請多少空間就用多少空間。
更多相關嵌入式免費資料檢視華清遠見講師博文》
陣列越界問題
c陣列越界問題 2010 07 23 22 23 include stdio.h define len 10 int main return 0 問題 為什麼輸入11個字元越界了都不會出錯?但是輸入13個字元卻出現錯誤?補充答案 在c語言中,很容易出現陣列越界問題。上面程式中定義了長度為10的int...
陣列越界問題
今天遇到了乙個問題 輸入一行文字,找出其中的大寫字母,小寫字母,空格,數字以及其他字元各有多少?要求用指標變數 我的答案 include void main int st char t,int o else if t n 97 t n 122 else if t n 48 t n 57 else i...
陣列越界問題
首先一點是明白陣列是有固定的大小的,然後是陣列的下標是從0開始到定義的陣列size 1。陣列越界常發生在非法索引訪問陣列,非法是指索引值為負值或大於等於陣列大小,這裡最常迷惑人的是大於等於陣列大小。首先,因為在往陣列中插入資料時,陣列此時的大小是等於陣列中資料長度的,並不是你之前的規定的值。那之前規...