防止atoi函式記憶體越界

2022-05-22 07:00:10 字數 526 閱讀 5520

函式形式為: int atoi(const char *nptr);

函式說明: 引數nptr字串,如果第乙個非空格字元不存在或者不是數字也不是正負號則返回零,否則開始做型別轉換,之後檢測到非數字(包括結束符 \0) 字元時停止轉換,返回整型數。

所以在使用時一不小心會造成記憶體越界,如以下**:

#include

int main()

輸出結果:

a=7,b=27

修改**如下:

#include

int main()

輸出結果:

a=7,b=27

a=0x7fff85cd714f,b=0x7fff85cd714e

由此可見,atoi()在轉換b時第乙個去的自符2,之後去的自符7,所以atoi(&b)輸出結果27,所以在實際使用中如果不能確定記憶體資料排列情況盡量不要用atoi(),最好自己寫個轉換函式。

也可定義乙個buf,用類似snprintf()函式將字元放到buf中再呼叫atoi()函式。

mysql 記憶體越界 strncpy越界

strncpy dest,src,n 似乎是安全的函式 原型 char strncpy char restrict s1,const char restrict s2,size t n 今天碰到了問題,是由於對strncpy理解不夠造成的 man裡 事實上s2往往不如n那麼長,於是s1剩餘部分會全填...

記憶體訪問越界

1.記憶體越界分配的原理 何謂記憶體訪問越界,簡單的說,你向系統申請了一塊記憶體,在使用這塊記憶體的時候,超出了你申請的範圍。例如,你明明申請的是100位元組的空間,但是你由於某種原因寫入了120位元組,這就是記憶體訪問越界。記憶體訪問越界的後果是 你的寫入破壞了本不屬於你的空間。如下所示的 輸出 ...

監測記憶體越界

ifndef checkmemoverflow h define checkmemoverflow h define check mem overflow ifdef check mem overflow 作業系統記憶體分配粒度為頁面 4k define page size 4096 define ...