C語言的常用庫函數(shù)

我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、晉源ssl等。為1000多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的晉源網(wǎng)站制作公司
函數(shù)1。absread()讀磁盤絕對(duì)扇區(qū)函數(shù)
函數(shù)2。abswrite()寫磁盤絕對(duì)扇區(qū)函數(shù)
函數(shù)3。atof()將字符串轉(zhuǎn)換成浮點(diǎn)數(shù)的函數(shù)
函數(shù)4。atoi()將字符串轉(zhuǎn)換成整型數(shù)的函數(shù)
函數(shù)5。atol()將字符串轉(zhuǎn)換成長(zhǎng)整型數(shù)的函數(shù)
函數(shù)6。bcd()把一個(gè)數(shù)轉(zhuǎn)換成對(duì)應(yīng)的BCD碼的函數(shù)
函數(shù)7。bdos()
函數(shù)8。biosdisk()調(diào)用BIOS磁盤驅(qū)動(dòng)程序函數(shù)
函數(shù)9。biosprint()調(diào)用BIOS打印機(jī)I/O接口的函數(shù)
函數(shù)10。calloc()分配內(nèi)存函數(shù)
函數(shù)11。ceil()
函數(shù)12。cgets()讀字符串函數(shù)
函數(shù)13。chdir()改變當(dāng)前目錄的函數(shù)
函數(shù)14。_chmod()改變文件存取權(quán)限的函數(shù)
函數(shù)15。chmod()改變文件存取權(quán)限的函數(shù)
函數(shù)16。clock()
函數(shù)17。close()關(guān)閉文件函數(shù)
函數(shù)18。closegraph()關(guān)閉圖形函數(shù)
函數(shù)19。cos()
函數(shù)20。ctrlbrk()設(shè)置ctrl-break處理程序的函數(shù)
函數(shù)21。delay()暫停函數(shù)
函數(shù)22。disable()屏蔽中斷的宏
函數(shù)23。enable()開硬件中斷的宏
函數(shù)24。exec()加載并運(yùn)行其它程序的函數(shù)族
函數(shù)25。farcalloc()從遠(yuǎn)堆中分配內(nèi)存的函數(shù)
函數(shù)26。farfree()從遠(yuǎn)堆中釋放一塊已分配內(nèi)存的函數(shù)
函數(shù)27。farmalloc()從遠(yuǎn)堆中分配內(nèi)存的函數(shù)
函數(shù)28。farrealloc()調(diào)整遠(yuǎn)堆中已分配塊的函數(shù)
函數(shù)29。fclose()關(guān)閉一個(gè)流函數(shù)
函數(shù)30。fcloseall()關(guān)閉打開的流的函數(shù)
函數(shù)31。feof()檢查文件是否結(jié)束的函數(shù)
函數(shù)32。fgets()從流中讀取一字符串的函數(shù)
函數(shù)33。findfirst()函數(shù)和findnext()函數(shù)
函數(shù)34。floodfill()填充區(qū)域的函數(shù)
函數(shù)35。floor()
函數(shù)36。fnmerge()建立文件路徑函數(shù)
函數(shù)37。fnsplit()分解完整的路徑名函數(shù)
函數(shù)38。fopen()打開一個(gè)流函數(shù)
函數(shù)39。FP_OFF()獲取遠(yuǎn)地址偏移量的宏
函數(shù)40。fprintf()傳送輸出到一個(gè)流中的函數(shù)
函數(shù)41。FP_SEG()獲取遠(yuǎn)地址段值的宏
函數(shù)42。fscanf()格式化輸入函數(shù)
函數(shù)43。fseek()移動(dòng)文件指針函數(shù)
函數(shù)44。fwrite()把參數(shù)寫入流中的函數(shù)
函數(shù)45。gcvt()把雙精度數(shù)轉(zhuǎn)化成字符串的函數(shù)
函數(shù)46。geninterrupt()執(zhí)行中斷函數(shù)
函數(shù)47。getc()從流中取字符的宏
函數(shù)48。getch()從鍵盤無回顯地讀取一字符的函數(shù)
函數(shù)49。getchar()從stdin流中讀取一個(gè)字符的函數(shù)
函數(shù)50。getcurdir()讀取指定驅(qū)動(dòng)器的當(dāng)前目錄的函數(shù)
函數(shù)61。getcwd()讀取當(dāng)前目錄的函數(shù)
函數(shù)62。getdate()讀取系統(tǒng)日期函數(shù)
函數(shù)63。getdfree()讀取磁盤空閑空間的函數(shù)
函數(shù)64。getdisk()讀取當(dāng)前磁盤驅(qū)動(dòng)器號(hào)函數(shù)
函數(shù)65。getenv()讀取環(huán)境變量的當(dāng)前值的函數(shù)
函數(shù)66。getimage()將指定區(qū)域的位圖象存入內(nèi)存的函數(shù)
函數(shù)67。getmaxx()返回屏幕上最大的X坐標(biāo)值的函數(shù)
函數(shù)68。getmaxy()返回屏幕上最大的Y坐標(biāo)值的函數(shù)
函數(shù)69。getpixel()讀取像素顏色的函數(shù)
函數(shù)70。getpsp()
函數(shù)71。gets()從標(biāo)準(zhǔn)輸入流stdio中讀取一字符串的函數(shù)
函數(shù)72。gettime()讀取系統(tǒng)時(shí)間的函數(shù)
函數(shù)73。getvect()讀取中斷向量函數(shù)
函數(shù)74。getx()返回當(dāng)前圖形方式下位置的X坐標(biāo)值的函數(shù)
函數(shù)75。gety()返回當(dāng)前圖形方式下位置的Y坐標(biāo)值的函數(shù)
函數(shù)76。imagesize()返回保存圖像緩沖區(qū)大小的函數(shù)
函數(shù)77。initgraph()顯示模式控制函數(shù)(初始化圖形系統(tǒng)函數(shù))
函數(shù)78。inport()從端口中讀入一個(gè)字的函數(shù)
函數(shù)79。inportb()從端口讀入一個(gè)字節(jié)的函數(shù)
函數(shù)80。int86()執(zhí)行中斷函數(shù)(調(diào)用8086軟中斷函數(shù))
函數(shù)81。int86x()執(zhí)行中斷函數(shù) (通用8086軟中斷接口函數(shù))
函數(shù)82。intdos()通用dos中斷接口函數(shù)
函數(shù)83。intdosx()通用dos中斷接口函數(shù)
函數(shù)84。intr()執(zhí)行8086軟中斷函數(shù)(改變軟中斷接口函數(shù))
函數(shù)85。itoa()把整形數(shù)轉(zhuǎn)換為字符串的函數(shù)
函數(shù)86。kbhit()檢查當(dāng)前按下的鍵的函數(shù)
函數(shù)87。keep()駐留并退出函數(shù)
函數(shù)88。log()
函數(shù)89。log10()
函數(shù)90。_lrotl()將一個(gè)無符號(hào)長(zhǎng)整形數(shù)左循環(huán)移位的函數(shù)
函數(shù)91。_lrotr()將一個(gè)無符號(hào)長(zhǎng)整形數(shù)右循環(huán)移位的函數(shù)
函數(shù)92。lseek()移動(dòng)文件指針函數(shù)
函數(shù)93。ltoa()把長(zhǎng)整形數(shù)轉(zhuǎn)換為字符串的函數(shù)
函數(shù)94。malloc()分配內(nèi)存函數(shù)
函數(shù)95。mkdir()創(chuàng)建目錄函數(shù)
函數(shù)96。mktemp()建立一個(gè)唯一的文件名的函數(shù)
函數(shù)97。MK_FP()設(shè)置一個(gè)遠(yuǎn)指針的宏
函數(shù)98。movedata()拷貝數(shù)據(jù)函數(shù)
函數(shù)99。_open()打開一個(gè)文件進(jìn)行讀寫的函數(shù)
函數(shù)100。open()打開文件進(jìn)行讀寫的函數(shù)
函數(shù)101。outport()輸出一個(gè)字到端口中的函數(shù)
函數(shù)102。outportb()輸出一個(gè)字節(jié)到端口中的函數(shù)
函數(shù)103。outtextxy()在指定位置顯示一字符串的函數(shù)
函數(shù)104。peek()返回指定內(nèi)存中字的函數(shù)
函數(shù)105。peekb()返回指定內(nèi)存中字節(jié)的函數(shù)
函數(shù)106。poke()在指定的內(nèi)存中存儲(chǔ)一個(gè)字的函數(shù)
函數(shù)107。pokeb()在指定的內(nèi)存中存儲(chǔ)一個(gè)字節(jié)的函數(shù)
函數(shù)108。pow()
函數(shù)109。printf()寫格式化輸出到stdout的函數(shù)
函數(shù)110。putch()向屏幕輸出字符的函數(shù)
函數(shù)111。putchar()在stdout上輸出字符的宏
函數(shù)112。putenv()將字符串放入當(dāng)前環(huán)境中的函數(shù)
函數(shù)113。putimage()重新寫屏函數(shù)(輸出一個(gè)位圖象到圖形屏幕上的函數(shù))
函數(shù)114。putpixel()寫像素點(diǎn)函數(shù)
函數(shù)115。puts()輸出一字符串到stdout(標(biāo)準(zhǔn)輸出)的函數(shù)
函數(shù)116。_read()讀文件函數(shù)
函數(shù)117。read()讀文件函數(shù)
函數(shù)118。realloc()重新分配內(nèi)存函數(shù)
函數(shù)119。rectangle()畫一個(gè)矩形的函數(shù)
函數(shù)120。remove()刪除一個(gè)文件的函數(shù)
函數(shù)121。rename()文件改名函數(shù)
函數(shù)122。restorecrtmode()恢復(fù)屏幕視頻模式為調(diào)用initgraph前的設(shè)置的函數(shù)
函數(shù)123。rmdir()刪除目錄函數(shù)
函數(shù)124。_rotl()將一個(gè)無符號(hào)整形數(shù)左循環(huán)移位的函數(shù)
函數(shù)125。_rotr()將一個(gè)無符號(hào)整形數(shù)右循環(huán)移位的函數(shù)
函數(shù)126。scanf()格式化輸入函數(shù)
函數(shù)127。searchpath()按dos路徑查找一個(gè)文件的函數(shù)
函數(shù)128。segread()讀段寄存器函數(shù)
函數(shù)129。setactivepage()設(shè)置圖形輸出活動(dòng)頁的函數(shù)
函數(shù)130。setcolor()設(shè)置當(dāng)前要畫的線顏色的函數(shù)
函數(shù)131。setdisk()設(shè)置當(dāng)前驅(qū)動(dòng)器的函數(shù)
函數(shù)132。setgraphmode()將系統(tǒng)設(shè)置成圖形模式并清屏的函數(shù)
函數(shù)133。setlinestyle()設(shè)置當(dāng)前畫線寬度和類型的函數(shù)
函數(shù)134。settextstyle()顯示字符的當(dāng)前設(shè)置函數(shù)
函數(shù)135。setvect()設(shè)置中斷向量函數(shù)
函數(shù)136。setviewport()建立視口的函數(shù)
函數(shù)137。setvisualpage()設(shè)置可見的圖形頁號(hào)的函數(shù)
函數(shù)138。sin()
函數(shù)139。sprintf()格式化輸出到數(shù)組的函數(shù)
函數(shù)140。strcat()
函數(shù)141。tan()
函數(shù)142。_write()寫文件函數(shù)
函數(shù)143。write()寫文件函數(shù)
原文釋義請(qǐng)到百度文庫里搜尋字串“C語言常用函數(shù)”后下載
函數(shù)51-60因原注里排序號(hào)碼少編,所以只有133個(gè)常用函數(shù)。
DOC大小是119.5KB
貢獻(xiàn)時(shí)間:2010-09-10
貢獻(xiàn)者:handanlinzhang
void
main()
{
int
a[5],*p
;
p=a;
p=(int*)malloc(5*sizeof(int))
;
//此處這樣寫有問題,根本就沒必要?jiǎng)討B(tài)分配內(nèi)存,因?yàn)閜指向的是一個(gè)數(shù)組,數(shù)組已經(jīng)定義,也就是已經(jīng)分配了空間,純粹多余
for(int
i=0;i5;i++)
scanf("%d",p++);
free(p);
}
malloc()是是在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配一個(gè)長(zhǎng)度為size的連續(xù)空間。
當(dāng)函數(shù)未能成功分配存儲(chǔ)空間(如內(nèi)存不足)就會(huì)返回一個(gè)NULL指針。所以在調(diào)用該函數(shù)時(shí)應(yīng)該檢測(cè)返回值是否為
NULL并執(zhí)行相應(yīng)的操作
malloc分配的內(nèi)存是位于堆中的,并且沒有初始化內(nèi)存的內(nèi)容使用了malloc沒有使用free,注意釋放內(nèi)存
在動(dòng)態(tài)分配的內(nèi)存單元(即由函數(shù)malloc()或ealloc()分配的內(nèi)存單元)不再使用卻沒有被釋放的情況下,會(huì)出現(xiàn)內(nèi)存漏洞。未釋放內(nèi)存單元本身并不是一種錯(cuò)誤,編譯程序不會(huì)因此報(bào)告出錯(cuò),程序也不會(huì)因此而立即崩潰。但是,如果不再使用而又沒有被釋放的內(nèi)存單元越來越多,程序所能使用的內(nèi)存空間就越來越小。最終,當(dāng)程序試圖要求分配內(nèi)存時(shí),就會(huì)發(fā)現(xiàn)已經(jīng)沒有可用的內(nèi)存空間。這時(shí),尤其是當(dāng)程序員沒有考慮到內(nèi)存分配失敗的可能性時(shí),程序的運(yùn)行就會(huì)出現(xiàn)異常現(xiàn)象。
內(nèi)存漏洞是最難檢測(cè)的錯(cuò)誤之一,同時(shí)也是最危險(xiǎn)的錯(cuò)誤。導(dǎo)致這個(gè)問題的編程錯(cuò)誤很可能出現(xiàn)在程序的開始部分,但只有當(dāng)程序奠名其妙地使用完內(nèi)存后,這個(gè)問題才會(huì)暴露出來。
此時(shí)去檢查當(dāng)前那條導(dǎo)致內(nèi)存分配失敗的語句是無濟(jì)于事的,因?yàn)槟切┓峙淞藘?nèi)存卻未能按時(shí)釋放內(nèi)存的代碼可能在程序的其它地方。
遺憾的是C語言并沒有為檢測(cè)或修復(fù)內(nèi)存漏洞提供現(xiàn)成的方法。除非使用提供這種功能的商業(yè)軟件包,否則,程序員就需要以很大的耐心和精力去檢測(cè)和修復(fù)內(nèi)存漏洞。最好的辦法是在編寫程序時(shí)就充分考慮到內(nèi)存漏洞的可能性,并小心謹(jǐn)慎地處理這種可能性。
導(dǎo)致內(nèi)存漏洞的最簡(jiǎn)單的也是最常見的原因是忘記釋放分配給臨時(shí)緩沖區(qū)的內(nèi)存空間,請(qǐng)看下述程序段:
# include
# include /** Say hello to the user's and put the user's name in UPPERCASE.*/void SayHi( char *name ){char * UpName;int a;UpName = malloc( strlen( name ) +1);
/ * Allocate space for the name * /
for( a =0; a
設(shè)計(jì)一個(gè)樁函數(shù):malloc_stub();
在這個(gè)函數(shù)內(nèi)直接返回NULL。然后用函數(shù)malloc_stub替換malloc,測(cè)試如上程序。
Windows下的 malloc 原理就是調(diào)用 windows API 的各種內(nèi)存管理函數(shù)申請(qǐng)內(nèi)存并記錄內(nèi)存狀態(tài)以便將來釋放。
DOS下的 malloc 原理就是調(diào)用申請(qǐng)內(nèi)存的中斷申請(qǐng)內(nèi)存并記錄內(nèi)存狀態(tài)以便將來釋放。
UNIX 和 Linux 都有內(nèi)存管理的系統(tǒng)調(diào)用,malloc 相當(dāng)于給這些系統(tǒng)調(diào)用穿了一件
malloc()工作機(jī)制
malloc函數(shù)的實(shí)質(zhì)體現(xiàn)在,它有一個(gè)將可用的內(nèi)存塊連接為一個(gè)長(zhǎng)長(zhǎng)的列表的所謂空閑鏈表。調(diào)用malloc函數(shù)時(shí),它沿連接表尋找一個(gè)大到足以滿足用戶請(qǐng)求所需要的內(nèi)存塊。然后,將該內(nèi)存塊一分為二(一塊的大小與用戶請(qǐng)求的大小相等,另一塊的大小就是剩下的字節(jié))。接下來,將分配給用戶的那塊內(nèi)存?zhèn)鹘o用戶,并將剩下的那塊(如果有的話)返回到連接表上。調(diào)用free函數(shù)時(shí),它將用戶釋放的內(nèi)存塊連接到空閑鏈上。到最后,空閑鏈會(huì)被切成很多的小內(nèi)存片段,如果這時(shí)用戶申請(qǐng)一個(gè)大的內(nèi)存片段,那么空閑鏈上可能沒有可以滿足用戶要求的片段了。于是,malloc函數(shù)請(qǐng)求延時(shí),并開始在空閑鏈上翻箱倒柜地檢查各內(nèi)存片段,對(duì)它們進(jìn)行整理,將相鄰的小空閑塊合并成較大的內(nèi)存塊。
malloc()在操作系統(tǒng)中的實(shí)現(xiàn)
在 C 程序中,多次使用malloc () 和 free()。不過,您可能沒有用一些時(shí)間去思考它們?cè)谀牟僮飨到y(tǒng)中是如何實(shí)現(xiàn)的。本節(jié)將向您展示 malloc 和 free 的一個(gè)最簡(jiǎn)化實(shí)現(xiàn)的代碼,來幫助說明管理內(nèi)存時(shí)都涉及到了哪些事情。
在大部分操作系統(tǒng)中,內(nèi)存分配由以下兩個(gè)簡(jiǎn)單的函數(shù)來處理:
void *malloc (long numbytes):該函數(shù)負(fù)責(zé)分配 numbytes 大小的內(nèi)存,并返回指向第一個(gè)字節(jié)的指針。
void free(void *firstbyte):如果給定一個(gè)由先前的 malloc 返回的指針,那么該函數(shù)會(huì)將分配的空間歸還給進(jìn)程的“空閑空間”。
malloc_init 將是初始化內(nèi)存分配程序的函數(shù)。它要完成以下三件事:將分配程序標(biāo)識(shí)為已經(jīng)初始化,找到系統(tǒng)中最后一個(gè)有效內(nèi)存地址,然后建立起指向我們管理的內(nèi)存的指針。這三個(gè)變量都是全局變量:
//清單 1. 我們的簡(jiǎn)單分配程序的全局變量
int has_initialized = 0;
void *managed_memory_start;
void *last_valid_address;
如前所述,被映射的內(nèi)存的邊界(最后一個(gè)有效地址)常被稱為系統(tǒng)中斷點(diǎn)或者 當(dāng)前中斷點(diǎn)。在很多 UNIX? 系統(tǒng)中,為了指出當(dāng)前系統(tǒng)中斷點(diǎn),必須使用 sbrk(0) 函數(shù)。 sbrk 根據(jù)參數(shù)中給出的字節(jié)數(shù)移動(dòng)當(dāng)前系統(tǒng)中斷點(diǎn),然后返回新的系統(tǒng)中斷點(diǎn)。使用參數(shù) 0 只是返回當(dāng)前中斷點(diǎn)。這里是我們的 malloc 初始化代碼,它將找到當(dāng)前中斷點(diǎn)并初始化我們的變量:
清單 2. 分配程序初始化函數(shù)
#include
void malloc_init()
{
last_valid_address = sbrk(0);
managed_memory_start = last_valid_address;
has_initialized = 1;
}
現(xiàn)在,為了完全地管理內(nèi)存,我們需要能夠追蹤要分配和回收哪些內(nèi)存。在對(duì)內(nèi)存塊進(jìn)行了 free 調(diào)用之后,我們需要做的是諸如將它們標(biāo)記為未被使用的等事情,并且,在調(diào)用 malloc 時(shí),我們要能夠定位未被使用的內(nèi)存塊。因此, malloc 返回的每塊內(nèi)存的起始處首先要有這個(gè)結(jié)構(gòu):
//清單 3. 內(nèi)存控制塊結(jié)構(gòu)定義
struct mem_control_block {
int is_available;
int size;
};
現(xiàn)在,您可能會(huì)認(rèn)為當(dāng)程序調(diào)用 malloc 時(shí)這會(huì)引發(fā)問題 —— 它們?nèi)绾沃肋@個(gè)結(jié)構(gòu)?答案是它們不必知道;在返回指針之前,我們會(huì)將其移動(dòng)到這個(gè)結(jié)構(gòu)之后,把它隱藏起來。這使得返回的指針指向沒有用于任何其他用途的內(nèi)存。那樣,從調(diào)用程序的角度來看,它們所得到的全部是空閑的、開放的內(nèi)存。然后,當(dāng)通過 free() 將該指針傳遞回來時(shí),我們只需要倒退幾個(gè)內(nèi)存字節(jié)就可以再次找到這個(gè)結(jié)構(gòu)。
在討論分配內(nèi)存之前,我們將先討論釋放,因?yàn)樗?jiǎn)單。為了釋放內(nèi)存,我們必須要做的惟一一件事情就是,獲得我們給出的指針,回退 sizeof(struct mem_control_block) 個(gè)字節(jié),并將其標(biāo)記為可用的。這里是對(duì)應(yīng)的代碼:
清單 4. 解除分配函數(shù)
void free(void *firstbyte) {
struct mem_control_block *mcb;
mcb = firstbyte - sizeof(struct mem_control_block);
mcb-is_available = 1;
return;
}
如您所見,在這個(gè)分配程序中,內(nèi)存的釋放使用了一個(gè)非常簡(jiǎn)單的機(jī)制,在固定時(shí)間內(nèi)完成內(nèi)存釋放。分配內(nèi)存稍微困難一些。我們主要使用連接的指針遍歷內(nèi)存來尋找開放的內(nèi)存塊。這里是代碼:
//清單 6. 主分配程序
void *malloc(long numbytes) {
void *current_location;
struct mem_control_block *current_location_mcb;
void *memory_location;
if(! has_initialized) {
malloc_init();
}
numbytes = numbytes + sizeof(struct mem_control_block);
memory_location = 0;
current_location = managed_memory_start;
while(current_location != last_valid_address)
{
current_location_mcb =
(struct mem_control_block *)current_location;
if(current_location_mcb-is_available)
{
if(current_location_mcb-size = numbytes)
{
current_location_mcb-is_available = 0;
memory_location = current_location;
break;
}
}
current_location = current_location +
current_location_mcb-size;
}
if(! memory_location)
{
sbrk(numbytes);
memory_location = last_valid_address;
last_valid_address = last_valid_address + numbytes;
current_location_mcb = memory_location;
current_location_mcb-is_available = 0;
current_location_mcb-size = numbytes;
}
memory_location = memory_location + sizeof(struct mem_control_block);
return memory_location;
}
這就是我們的內(nèi)存管理器。現(xiàn)在,我們只需要構(gòu)建它,并在程序中使用它即可.多次調(diào)用malloc()后空閑內(nèi)存被切成很多的小內(nèi)存片段,這就使得用戶在申請(qǐng)內(nèi)存使用時(shí),由于找不到足夠大的內(nèi)存空間,malloc()需要進(jìn)行內(nèi)存整理,使得函數(shù)的性能越來越低。聰明的程序員通過總是分配大小為2的冪的內(nèi)存塊,而最大限度地降低潛在的malloc性能喪失。也就是說,所分配的內(nèi)存塊大小為4字節(jié)、8字節(jié)、16字節(jié)、 18446744073709551616字節(jié),等等。這樣做最大限度地減少了進(jìn)入空閑鏈的怪異片段(各種尺寸的小片段都有)的數(shù)量。盡管看起來這好像浪費(fèi)了空間,但也容易看出浪費(fèi)的空間永遠(yuǎn)不會(huì)超過50%。
1.文件的大小。
文件大小:該文件所占的存儲(chǔ)空間的大小,基本單位為字節(jié)B,字節(jié)向上分別為KB、MB、GB、TB,每級(jí)為前一級(jí)的1024倍,比如1KB=1024B,1M=1024KB。
2.是否可以不預(yù)先分配內(nèi)存。
可以不預(yù)先分配跟文件大小一致的內(nèi)存,但是從文件中讀出的每一行都要分配一個(gè)內(nèi)存,可以為每一行設(shè)定一個(gè)固定的內(nèi)存大小,比如A字節(jié),然后用C語言的malloc函數(shù)為該行數(shù)據(jù)分配內(nèi)存,讀出數(shù)據(jù)后,判斷分配的內(nèi)存是否夠用,如果不夠用,可以用C語言的realloc函數(shù)對(duì)該塊內(nèi)存進(jìn)行再分配。
malloc函數(shù)
malloc的全稱是memory allocation,中文叫動(dòng)態(tài)內(nèi)存分配,用于申請(qǐng)一塊連續(xù)的指定大小的內(nèi)存塊區(qū)域以void*類型返回分配的內(nèi)存區(qū)域地址,當(dāng)無法知道內(nèi)存具體位置的時(shí)候,想要綁定真正的內(nèi)存空間,就需要用到動(dòng)態(tài)的分配內(nèi)存。
void* 類型表示未確定類型的指針。C,C++規(guī)定,void* 類型可以通過類型轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換為任何其它類型的指針。
realloc函數(shù)
realloc的全程是reset allocation,中文名叫動(dòng)態(tài)內(nèi)存調(diào)整,用于調(diào)整一塊連續(xù)的已分配的內(nèi)存塊區(qū)域。
3.數(shù)組和struct結(jié)構(gòu)體的建立。
double數(shù)組:double a[100];
字符數(shù)組:char a[100];
struct結(jié)構(gòu)體:
struct?st?{
double a[100];
char b[100];
};
網(wǎng)站名稱:c語言檢測(cè)內(nèi)存的函數(shù),c語言檢測(cè)內(nèi)存的函數(shù)是什么
本文路徑:http://chinadenli.net/article13/dsgeggs.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、全網(wǎng)營(yíng)銷推廣、建站公司、域名注冊(cè)、品牌網(wǎng)站制作、網(wǎng)站營(yíng)銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)