c語言常見函式

2021-07-04 08:48:21 字數 1892 閱讀 1917

原型:extern void *malloc(unsigned int num_bytes);

功能:分配長度為num_bytes位元組的記憶體塊

返回值:如果分配成功則返回指向被分配記憶體的指標(此儲存區中的初始值不確定),否則返回空指標null。當記憶體不再使用時,應使用free()函式將記憶體塊釋放。函式返回的指標一定要適當對齊,使其可以用於任何資料物件。

說明:關於該函式的原型,在以前malloc返回的是char型指標,新的ansic標準規定,該函式返回為void型指標,因此必要時要進行型別轉換。

原型:extern void *realloc(void *mem_address, unsigned int newsize);

功能:先判斷當前的指標是否有足夠的連續空間,如果有,擴大mem_address指向的位址,並且將mem_address返回,如果空間不夠,先按照newsize指定的大小分配空間,將原有資料從頭到尾拷貝到新分配的記憶體區域,而後釋放原來mem_address所指記憶體區域(注意:原來指標是自動釋放,不需要使用free),同時返回新分配的記憶體區域的首位址。即重新分配儲存器塊的位址。

返回值:如果重新分配成功則返回指向被分配記憶體的指標,否則返回空指標null。

說明:當記憶體不再使用時,應使用free()函式釋放記憶體

標頭檔案:malloc.h

作用:釋放malloc()函式給指標變數分配的記憶體空間的函式,使用後該指標變數一定要重新指向null,防止野指標出現,有效規避誤操作。

功能: 與malloc()函式配對使用,釋放malloc函式申請的動態記憶體。(對於free(p)這句語句,如果p是null指標,那麼free對p無論操作多少次都不會出問題。如果p不是null指標,那麼free對p連續操作兩次就會導致程式執行錯誤。)

用法:void free(void *ptr);

ps:free函式只接收乙個指標,並沒有接收到需要釋放多大空間的引數,似乎無法確定需要釋放多大空間。實際上,利用malloc函式申請空間時,除了申請到的可用記憶體空間,還申請了乙個私有的記錄頭部,該頭部記錄了所申請的記憶體空間的詳細資訊。free函式根據指標找到該頭部,從而確定需要釋放多大空間

原型:extern unsigned int strlen(char *s);

標頭檔案:string.h

格式:strlen (字元陣列名)

功能:計算字串s的(unsigned int型)長度,不包括』\0』在內

說明:返回s的長度,不包括結束符null。

原型:extern int strcmp(const char *s1,const char *s2);

說明:當s1s2時,返回正數

即:兩個字串自左向右逐個字元相比(按ascii值大小相比較),直到出現不同的字元或遇』\0』為止。如:

「a」<」b」 「a」>」a」 「computer」>」compare」

特別注意:strcmp(const char *s1,const char * s2)這裡面只能比較字串,即可用於比較兩個字串常量,或比較陣列和字串常量,不能比較數字等其他形式的引數。

ansi標準規定,返回值為正數,負數,0 。而確切數值是依賴不同的c實現的。

原型宣告:extern char *strcpy(char* dest, const char *src);

標頭檔案:#include#include

功能:把從src位址開始且含有null結束符的字串複製到以dest開始的位址空間

說明:src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。返回指向dest的指標。

C語言常見函式重寫

面試題中經常出現一類考題就是,重新實現c語言中的庫函式,例如 strcpy,memcpy,stcmp.strcpy函式 char mystrcpy char des,const char src strlen函式 int mystrlen const char str int my strlen c...

常見C語言字串函式

額,據說,在面試的時候經常會出現要我們實現字串函式的題目,話還說這些題目其實很簡單,主要考的是面試者的 風格和考慮問題的嚴謹性。偶要是沒看到有些面試題目考這些字串函式,偶估計就不會用c語言去實現這些函式了,因為覺得,庫函式都已經有了幹嘛還要去寫呢?呵呵,後來,自己去試著寫庫函式,和網上的一些大牛寫的...

C語言 函式程式設計的常見錯誤

函式程式設計的常見錯誤 1 定義函式時,函式頭後面多加了分號 如 int sum int a,int b 此處不應有分號 2 定義函式時,虛參前面忘記寫型別 如 int sum a,b 每個虛參前面都應寫上型別 3 呼叫函式前忘記函式宣告 除非是定義函式在前,呼叫在後,或函式是char 或int 型...