C語言標準庫概覽詳述[9]-實用函數

在頭文件<stdlib.h>中說明了用於數值轉換、內存分配以及具有其他相似任務的函數。

9.1 atof

double atof(const char *str);

把字符串str轉換成double類型。等價於:strtod(str, (char**)NULL)。

9.2 atoi

int atoi(const char *str);

把字符串str轉換成int類型。等價於:(int)strtol(str, (char**)NULL, 10)。

9.3 atol

long atol(const char *str);

把字符串str轉換成long類型。等價於:strtol(str, (char**)NULL, 10)。

9.4 strtod

double strtod(const char *start, char **end);

把字符串start的前綴轉換成double類型。在轉換中跳過start的前導空白符,然後逐個讀入構成數的字符,任何非浮點數成分的字符都會終止上述過程。如果end不爲NULL,則把未轉換部分的指針保存在*end中。

如果結果上溢,返回帶有適當符號的HUGE_VAL,如果結果下溢,那麼函數返回0。在這兩種情況下,errno均被置爲ERANGE。

9.5 strtol

long int strtol(const char *start, char **end, int radix);

把字符串start的前綴轉換成long類型,在轉換中跳過start的前導空白符。如果end不爲NULL,則把未轉換部分的指針保存在*end中。

如果radix的值在2到36間之間,那麼轉換按該基數進行;如果radix爲0,則基數爲八進制、十進制、十六進制,以0爲前導的是八進制,以0x或0X爲前導的是十六進制。無論在哪種情況下,串中的字母是表示10到radix-1之間數字的字母。如果radix是16,可以加上前導0x或0X。

如果結果上溢,則依據結果的符號返回LONG_MAX或LONG_MIN,置errno爲ERANGE。

9.6 strtoul

unsigned long int strtoul(const char *start, char **end, int radix);

與strtol()類似,只是結果爲unsigned long類型,溢出時值爲ULONG_MAX。

9.7 rand

int rand(void);

產生一個0到RAND_MAX之間的僞隨機整數。RAND_MAX值至少爲32767。

9.8 srand

void srand(unsigned int seed);

設置新的僞隨機數序列的種子爲seed。種子的初值爲1。

9.9 calloc

void *calloc(size_t num, size_t size);

爲num個大小爲size的對象組成的數組分配足夠的內存,並返回指向所分配區域的第一個字節的指針;如果內存不足以滿足要求,則返回NULL。

分配的內存區域中的所有位被初始化爲0。

9.10 malloc

void *malloc(size_t size);

爲大小爲size的對象分配足夠的內存,並返回指向所分配區域的第一個字節的指針;如果內存不足以滿足要求,則返回NULL。

不對分配的內存區域進行初始化。

9.11 realloc

void *realloc(void *ptr, size_t size);

將ptr指向的內存區域的大小改爲size個字節。如果新分配的內存比原內存大,那麼原內存的內容保持不變,增加的空間不進行初始化。如果新分配的內存比原內存小,那麼新內存保持原內存區中前size字節的內容。函數返回指向新分配空間的指針。如果不能滿足要求,則返回NULL,原ptr指向的內存區域保持不變。

如果ptr爲NULL,則行爲等價於malloc(size)。

如果size爲0,則行爲等價於free(ptr)。

9.12 free

void free(void *ptr);

釋放ptr指向的內存空間,若ptr爲NULL,則什麼也不做。ptr必須指向先前用動態分配函數malloc、realloc或calloc分配的空間。

9.13 abort

void abort(void);

使程序非正常終止。其功能類似於raise(SIGABRT)。

9.14 exit

void exit(int status);

使程序正常終止。atexit函數以與註冊相反的順序被調用,所有打開的文件被刷新,所有打開的流被關閉。status的值如何被返回依具體的實現而定,但用0表示正常終止,也可用值EXIT_SUCCESS和EXIT_FAILURE。

9.15 atexit

int atexit(void (*func)(void));

註冊在程序正常終止時所要調用的函數func。如果成功註冊,則函數返回0值,否則返回非0值。

9.16 system

int system(const char *str);

把字符串str傳送給執行環境。如果str爲NULL,那麼在存在命令處理程序時,返回0值。如果str的值非NULL,則返回值與具體的實現有關。

9.17 getenv

char *getenv(const char *name);

返回與name相關的環境字符串。如果該字符串不存在,則返回NULL。其細節與具體的實現有關。

9.18 bsearch

void *bsearch(const void *key, const void *base, size_t n, size_t size,	int (*compare)(const void *, const void *));

在base[0]...base[n-1]之間查找與*key匹配的項。size指出每個元素佔有的字節數。函數返回一個指向匹配項的指針,若不存在匹配則返回NULL。

函數指針compare指向的函數把關鍵字key和數組元素比較,比較函數的形式爲:

int func_name(const void *arg1, const void *arg2);

arg1是key指針,arg2是數組元素指針。

返回值必須如下:

  • arg1 < arg2時,返回值<0;
  • arg1 == arg2時,返回值==0;
  • arg1 > arg2時,返回值>0。

數組base必須按升序排列(與compare函數定義的大小次序一致)。

9.19 qsort

void qsort(void *base, size_t n, size_t size, int (*compare)(const void *, const void *));

對由n個大小爲size的對象構成的數組base進行升序排序。

比較函數compare的形式如下:

int func_name(const void *arg1, const voie *arg2);

其返回值必須如下所示:

  • • arg1 < arg2,返回值<0;
  • • arg1 == arg2,返回值==0;
  • • arg1 > arg2,返回值>0。

9.20 abs

int abs(int num);

返回int變量num的絕對值。

9.21 labs

long labs(long int num);

返回long類型變量num的絕對值。

9.22 div

div_t div(int numerator, int denominator);

返回numerator/denominator的商和餘數,結果分別保存在結構類型div_t的兩個int成員quot和rem中。

9.23 ldiv

ldiv_t div(long int numerator, long int denominator);

返回numerator/denominator的商和餘數,結果分別保存在結構類型ldiv_t的兩個long成員quot和rem中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章