C语言 数组内存溢出 - C语言零基础入门教程
目錄
- 一.數(shù)組內(nèi)存溢出簡(jiǎn)介
- 二.數(shù)組內(nèi)存溢出實(shí)例
- 三.猜你喜歡
零基礎(chǔ) C/C++ 學(xué)習(xí)路線推薦 : C/C++ 學(xué)習(xí)目錄 >> C 語言基礎(chǔ)入門
一.數(shù)組內(nèi)存溢出簡(jiǎn)介
溢出:想象一個(gè)桶,桶的容積是有限的,你裝滿了水以后,如何還要往里面裝,那么水就溢出到地面了。
C 語言中的溢出和這個(gè)原理一樣,桶的容積就表示你定義的某一數(shù)據(jù)的內(nèi)存大小,往里面寫入數(shù)據(jù)就表示在裝水。
案例一:一個(gè)計(jì)時(shí)器,最大計(jì) 100s 的時(shí),你讓他跑了 120 秒,它就溢出了;
案例二:兩個(gè) unsignedchar,一個(gè)200,一個(gè)也是200,相加,結(jié)果也就溢出,因?yàn)?unsignedchar 最大就 255 ;
二.數(shù)組內(nèi)存溢出實(shí)例
/******************************************************************************************/ //@Author:猿說編程 //@Blog(個(gè)人博客地址): www.codersrc.com //@File:C語言教程 - C語言 數(shù)組內(nèi)存溢出 //@Time:2021/06/10 08:00 //@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅(jiān)持不懈地積累! /******************************************************************************************/#include<stdlib.h> #include<stdio.h> void main() {unsigned char a[3] = {0};a[0] = 200;a[1] = 200;a[2] = a[0] + a[1]; //unsigned char 取值范圍:0~255 ,超出取值范圍printf("a:%d b:%d c:%d\n", a[0], a[1], a[2]);system("pause"); } /* 輸出: a:200 b:200 c:144 請(qǐng)按任意鍵繼續(xù). . . */在C語言中unsignedchar無符號(hào)字符類型取值范圍是0~255,很明顯a[2]=400,超出取值范圍,內(nèi)存溢出!為什么a[2]=144?
當(dāng)如果 unsignedchar 變量超過 255之 后,默認(rèn)又繼續(xù)重 0 開始計(jì)算,例如:[int](https://www.codersrc.com/archives/7409.html) 類型 和 unsignedchar類型轉(zhuǎn)換:
int類型 和 unsigned char類型轉(zhuǎn)換int unsigned char254 254255 255256 0257 1258 2... ...399 143400 144// 400 - 255 = 144在取值 0~255 的時(shí)候,int 和當(dāng)如果 unsignedchar 一樣,當(dāng)超出 255 之后,當(dāng)如果 unsignedchar 繼續(xù)重 0 開始;
三.猜你喜歡
未經(jīng)允許不得轉(zhuǎn)載:猿說編程 ? C 語言 數(shù)組內(nèi)存溢出
總結(jié)
以上是生活随笔為你收集整理的C语言 数组内存溢出 - C语言零基础入门教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言逻辑运算符 - C语言零基础入门教
- 下一篇: jq之attr()