實用函數<stdlib.h>
在頭文件<stdlib.h>中說明了用於數值轉換、內存分配以及具有其他相似任務的函數。
1 atof
#include <stdlib.h>
double atof(const char *str);
把字符串str轉換成double類型。等價於:strtod(str, (char**)NULL)。
2 atoi
#include <stdlib.h>
int atoi(const char *str);
把字符串str轉換成int類型。等價於:(int)strtol(str, (char**)NULL, 10)。
3 atol
#include <stdlib.h>
long atol(const char *str);
把字符串str轉換成long類型。等價於:strtol(str, (char**)NULL, 10)。
4 strtod
#include <stdlib.h>
double strtod(const char *start, char **end);
把字符串start的前綴轉換成double類型。在轉換中跳過start的前導空白符,然后逐個讀入構成數的字符,任何非浮點數成分的字符都會終止上述過程。如果end不為NULL,則把未轉換部分的指針保存在*end中。
如果結果上溢,返回帶有適當符號的HUGE_VAL,如果結果下溢,那么函數返回0。在這兩種情況下,errno均被置為ERANGE。
5 strtol
#include <stdlib.h>
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。
6 strtoul
#include <stdlib.h>
unsigned long int strtoul(const char *start, char **end, int radix);
與strtol()類似,只是結果為unsigned long類型,溢出時值為ULONG_MAX。
7 rand
#include <stdlib.h>
int rand(void);
產生一個0到RAND_MAX之間的偽隨機整數。RAND_MAX值至少為32767。
8 srand
#include <stdlib.h>
void srand(unsigned int seed);
設置新的偽隨機數序列的種子為seed。種子的初值為1。
9 calloc
#include <stdlib.h>
void *calloc(size_t num, size_t size);
為num個大小為size的對象組成的數組分配足夠的內存,並返回指向所分配區域的第一個字節的指針;如果內存不足以滿足要求,則返回NULL。
分配的內存區域中的所有位被初始化為0。
10 malloc
#include <stdlib.h>
void *malloc(size_t size);
為大小為size的對象分配足夠的內存,並返回指向所分配區域的第一個字節的指針;如果內存不足以滿足要求,則返回NULL。
不對分配的內存區域進行初始化。
11 realloc
#include <stdlib.h>
void *realloc(void *ptr, size_t size);
將ptr指向的內存區域的大小改為size個字節。如果新分配的內存比原內存大,那么原內存的內容保持不變,增加的空間不進行初始化。如果新分配的內存比原內存小,那么新內存保持原內存區中前size字節的內容。函數返回指向新分配空間的指針。如果不能滿足要求,則返回NULL,原ptr指向的內存區域保持不變。
如果ptr為NULL,則行為等價於malloc(size)。
如果size為0,則行為等價於free(ptr)。
12 free
#include <stdlib.h>
void free(void *ptr);
釋放ptr指向的內存空間,若ptr為NULL,則什么也不做。ptr必須指向先前用動態分配函數malloc、realloc或calloc分配的空間。
13 abort
#include <stdlib.h>
void abort(void);
使程序非正常終止。其功能類似於raise(SIGABRT)。
14 exit
#include <stdlib.h>
void exit(int status);
使程序正常終止。atexit函數以與注冊相反的順序被調用,所有打開的文件被刷新,所有打開的流被關閉。status的值如何被返回依具體的實現而定,但用0表示正常終止,也可用值EXIT_SUCCESS和EXIT_FAILURE。
15 atexit
#include <stdlib.h>
int atexit(void (*func)(void));
注冊在程序正常終止時所要調用的函數func。如果成功注冊,則函數返回0值,否則返回非0值。
16 system
#include <stdlib.h>
int system(const char *str);
把字符串str傳送給執行環境。如果str為NULL,那么在存在命令處理程序時,返回0值。如果str的值非NULL,則返回值與具體的實現有關。
17 getenv
#include <stdlib.h>
char *getenv(const char *name);
返回與name相關的環境字符串。如果該字符串不存在,則返回NULL。其細節與具體的實現有關。
18 bsearch
#include <stdlib.h>
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函數定義的大小次序一致)。
19 qsort
#include <stdlib.h>
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。
20 abs
#include <stdlib.h>
int abs(int num);
返回int變量num的絕對值。
21 labs
#include <stdlib.h>
long labs(long int num);
返回long類型變量num的絕對值。
22 div
#include <stdlib.h>
div_t div(int numerator, int denominator);
返回numerator/denominator的商和余數,結果分別保存在結構類型div_t的兩個int成員quot和rem中。
23 ldiv
#include <stdlib.h>
ldiv_t div(long int numerator, long int denominator);
返回numerator/denominator的商和余數,結果分別保存在結構類型ldiv_t的兩個long成員quot和rem中。