第17章 标准工具库函数库:stdlib.h 对于一些特殊的操作,C语言提供了标准工具库函数库(stdlib.h),其中包括可以实现数值转换、内存分配、随机数操作以及字符串转换等的函数。 17.1 abort()——异常终止进程函数 abort()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\17\01
abort()函数用于写一个终止信息到stderr,并异常终止程序。
语法
void abort(void);
abort()函数没有参数。
abort()函数没有返回值。
示例
本示例演示用abort()函数异常终止一个进程,并输出信息“Abnormal program termination”。其具体代码如下:
运行结果如图17.1所示。
图17.1 使用abort()函数终止程序 17.2 atexit()——注册终止函数 atexit()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\17\02
atexit()函数用于注册终止。
语法
int atexit(atexit_t fc);
atexit()函数的语法参数说明如下:
参数fc为指向终止处理函数的指针。
atexit()函数的返回值:成功调用返回0,否则返回非0值。
示例
本示例演示用atexit()函数实现程序终止时,调用注册出口函数f1()和f2()。其具体代码如下:
运行结果如图17.2所示。
图17.2 使用atexit()函数调用注册出口函数 17.3 atof()——转换字符串函数 atof()函数
实用程度:★★★★☆
实例位置:配套资源\SL\17\03
atof()函数用于将字符串转换为浮点值。
语法
double atof(const char *s);
atof()函数的语法参数说明如下:
参数s为要转换的字符串。
atof()函数的返回值:转换后的浮点值。
示例
本示例演示用atof()函数将字符串“5257.1314”转换成浮点值,并输出字符串和转换的浮点型值。其具体代码如下:
运行结果如图17.3所示。
图17.3 使用atof()函数实现字符串转换 17.4 atoi()——转换字符串函数 atoi()函数
实用程度:★★★★☆
实例位置:配套资源\SL\17\04
atoi()函数用于将字符串转换成整型数。
语法
int atoi(const char *s);
atoi()函数的语法参数说明如下:
参数s为要转换的字符串。
atoi()函数的返回值:转换后的整型值。
示例
本示例演示用atoi()函数将字符串“5257.1314”转换成整型值,并输出字符串和转换的整型值。其具体代码如下:
运行结果如图17.4所示。
图17.4 使用atoi()函数实现字符串转换 17.5 atol()——转换字符串函数 atol()函数
实用程度:★★★★☆
实例位置:配套资源\SL\17\05
atol()函数用于将字符串转换成长整型值。
语法
long atol(const char *s);
atol()函数的语法参数说明如下:
参数s为要转换的字符串。
atol()函数的返回值:转换后的长整型值。
示例
本示例演示用atol()函数将字符串“525713.14”转换成长整型值,并输出字符串和转换的长整型值。其具体代码如下:
运行结果如图17.5所示。
图17.5 使用atol()函数将字符串转换成长整型值 17.6 bsearch()——二分法搜索函数 bsearch()函数
实用程度:★★☆☆☆
实例位置:配套资源\SL\17\06
bsearch()函数用于二分法搜索。
语法
void bsearch(const void key, const void list, size_t n, size_t m, int(fc)(const void , const *));
bsearch()函数的语法参数说明如表17.1所示。
表17.1 参数说明
bsearch()函数没有返回值。
示例
本示例演示用bsearch()函数实现二分法搜索元素456。其具体代码如下:
运行结果如图17.6所示。
图17.6 使用bsearch()函数实现二分法搜索元素 17.7 calloc()——分配主存储器函数 calloc()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\17\07
calloc()函数用于分配主存储器。
语法
void *calloc(size_t n, size_t s);
calloc()函数的语法参数说明如下:
参数n为要分配空间的个数。
参数s为要分配空间的字节数。
calloc()函数的返回值:所分配内存的指针。
示例
本示例演示用calloc()函数为输入的元素动态分配内存空间。其具体代码如下:
运行结果如图17.7所示。
图17.7 使用calloc()函数动态分配内存 17.8 div()——整数相除函数 div()函数
实用程度:★★★★☆
实例位置:配套资源\SL\17\08
div()函数用于两整数相除。
语法
div_t (int x, int y);
div()函数的语法参数说明如下:
参数x为被除数。
参数y为除数。
div()函数的返回值:商和余数。
示例
本示例演示用div()函数求两个整数210和25相除的商和余数。其具体代码如下:
运行结果如图17.8所示。
图17.8 使用div()函数实现两整数相除 17.9 ecvt()——转换浮点数函数 ecvt()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\17\09
ecvt()函数用于把浮点数转换为字符串。
语法
char ecvt(double f, int n, int p, int c);
ecvt()函数的语法参数说明如表17.2所示。
表17.2 参数说明
ecvt()函数的返回值:字符串指针。
示例
本示例演示用ecvt()函数将5.21、-103.23、0.1234e5转换成字符串,并将其输出。其具体代码如下:
运行结果如图17.9所示。
图17.9 将浮点数转换成字符串 17.10 exit()——终止程序函数 exit()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\17\10
exit()函数用于正常终止程序。
语法
void exit(int status);
exit()函数的语法参数说明如下:
参数status为终止状态。
exit()函数没有返回值。
示例
本示例演示用exit()函数正常终止一个程序,其后面的语句将不被执行。其具体代码如下:
运行结果如图17.10所示。
图17.10 使用exit()函数正常终止一个程序 17.11 fcvt()——转换浮点数函数 fcvt()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\17\11
fcvt()函数用于将浮点数转换为字符串。
语法
char fcvt(double f, int n, int p, int c);
fcvt()函数的语法参数说明如表17.3所示。
表17.3 参数说明
fcvt()函数的返回值:字符串指针。
示例
本示例演示用fcvt()函数将5.21、-103.23、0.1234e5转换成字符串,并将其输出。其具体代码如下:
运行结果如图17.11所示。
图17.11 使用fcvt()函数将浮点数转换成字符串 17.12 free()——释放已分配块函数 free()函数
实用程度:★★★★☆
实例位置:配套资源\SL\17\12
free()函数用于释放已分配的内存块。
语法
void free(void *block);
free()函数的语法参数说明如下:
参数block为已分配的内存块。
free()函数没有返回值。
示例
本示例演示用free()函数释放已分配的内存空间。其具体代码如下:
运行结果如图17.12所示。
图17.12 使用free()函数释放内存 17.13 gcvt()——转换浮点数函数 gcvt()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\17\13
gcvt()函数用于将浮点数转换成字符串,转换时四舍五入。
语法
char gcvt(double d, int n, char *c);
gcvt()函数的语法参数说明如下:
参数d为要转换的浮点数。
参数n为显示的位数。
参数c为存放结果的临时缓冲区。
gcvt()函数的返回值:字符串指针,即c指针。
示例
本示例演示用gcvt()函数将浮点型的3.1415、-110.25和0.246e5转换为字符串,并将其输出。其具体代码如下:
运行结果如图17.13所示。
图17.13 使用gcvt()函数将浮点数转换为字符串 17.14 getenv()——获取环境中字符串函数 getenv()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\17\14
getenv()函数用于获取当前环境中的字符串。
语法
char getenv(char name);
getenv()函数的语法参数说明如下:
参数name为环境变量名。
getenv()函数的返回值:给定的环境变量值,如果指定的变量在环境中未定义,则返回NULL。
示例
本示例演示用getenv()函数获取名为COMSPEC的环境字符串的首地址,并将其显示出来。其具体代码如下:
运行结果如图17.14所示。
图17.14 使用getenv()函数显示环境变量 17.15 itoa()——转换整数函数 itoa()函数
实用程度:★★★★☆
实例位置:配套资源\SL\17\15
itoa()函数用于把整数转换成字符串。
语法
char itoa(int i, char c, int radix);
itoa()函数的语法参数说明如下:
参数i为要转换为字符的数字。
参数c为转换后的字符。
参数radix为转换数字的进制数。
itoa()函数的返回值:指向转换后的字符串指针。
示例
本示例演示用itoa()函数将整数1725转换为字符串并输出结果。其具体代码如下:
运行结果如图17.15所示。
图17.15 使用itoa()函数将整数转换为字符串 17.16 ldiv()——长整型数相除函数 ldiv()函数
实用程度:★★★★☆
实例位置:配套资源\SL\17\16
ldiv()函数用于两个长整型数相除。
语法
ldiv_t ldiv(long lx, long ly);
ldiv()函数的语法参数说明如下:
参数lx为被除数。
参数ly为除数。
ldiv()函数的返回值:商和余数。
示例
本示例演示用ldiv()函数计算两个长整型数165000和35500相除的商和余数。其具体代码如下:
运行结果如图17.16所示。
图17.16 使用ldiv()函数实现两个长整型数相除 17.17 lfind()——线性搜索函数 lfind()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\17\17
lfind()函数用于在给定区域内从头到尾进行线性搜索。
语法
void lfind(void key, void district, int n, int m, int (*fc)());
lfind()函数的语法参数说明如表17.4所示。
表17.4 参数说明
lfind()函数的返回值:若找到关键数据则返回找到的该元素的地址,否则返回NULL。
示例
本示例演示用lfind()函数实现在数组a中线性搜索元素68。其具体代码如下:
运行结果如图17.17所示。
图17.17 使用lfind()函数实现线性搜索 17.18 lsearch()——线性搜索函数 lsearch()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\17\18
lsearch()函数用于在给定区域内从头到尾进行线性搜索。
语法
void lsearch(const void key, void district, size_t n, size_t m, int (fc)(const void , const void *));
lsearch()函数的语法参数说明如表17.5所示。
表17.5 参数说明
lsearch()函数的返回值:若找到关键数据,则返回找到元素的地址;若所找数据不在查找区域,则将此数据加入到查找区域,再把加入后的地址返回。
示例
本示例演示用lsearch()函数实现在数组a中线性搜索元素27,并将新元素加入到数组中。其具体代码如下:
运行结果如图17.18所示。
图17.18 使用lsearch()函数实现线性搜索 17.19 malloc()——内存分配函数 malloc()函数
实用程度:★★★★☆
实例位置:配套资源\SL\17\19
malloc()函数用于分配指定大小的内存空间。
语法
void *malloc(unsigned size);
malloc()函数的语法参数说明如下:
参数size为要分配空间的大小。
malloc()函数的返回值:所分配内存的指针。
示例
本示例演示用malloc()函数为字符串“good luck!”动态分配内存。其具体代码如下:
运行结果如图17.19所示。
图17.19 使用malloc()函数动态分配内存 17.20 putenv()——加载环境中字符串函数 putenv()函数
实用程度:★★☆☆☆
实例位置:配套资源\SL\17\20
putenv()函数用于改变或增加环境变量的内容。
语法
int putenv(char *name);
putenv()函数的语法参数说明如下:
参数name为环境变量名。
putenv()函数的返回值:执行成功返回0,否则返回-1。
示例
本示例演示用putenv()函数将环境变量进行拼接字符串,然后将其替换为原来的环境变量。其具体代码如下:
运行结果如图17.20所示。
图17.20 使用putenv()函数改变环境变量 17.21 qsort()——快速排序函数 qsort()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\17\21
qsort()函数用于对记录从小到大快速排序。
语法
void qsort(void district, int n, int m, int (fc)());
qsort()函数的语法参数说明如表17.6所示。
表17.6 参数说明
qsort()函数没有返回值。
示例
本示例演示用qsort()函数对无序序列a进行快速排序。其具体代码如下:
运行结果如图17.21所示。
图17.21 使用qsort()函数实现快速排序 17.22 rand()——随机数发生器函数 rand()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\17\22
rand()函数用于生成随机数。
语法
void rand(void);
rand()函数没有参数。
rand()函数的返回值:产生的随机整数。
示例
本示例演示用rand()函数产生5个随机的两位数。其具体代码如下:
运行结果如图17.22所示。
图17.22 使用rand()函数生成随机数 17.23 random()——随机数发生器函数 random()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\17\23
random()函数用于按给定的最大值生成随机数。
语法
int random(int num);
random()函数的语法参数说明如下:
参数num为生成的随机数的最大值。
random()函数的返回值:不大于指定大小的随机数。
示例
本示例演示用random()函数生成指定大小的随机数。其具体代码如下:
运行结果如图17.23所示。
图17.23 使用random()函数生成随机数 17.24 randomize()——随机数发生器函数 randomize()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\17\24
randomize()函数用于初始化随机数发生器。
语法
void randomize(void);
randomize()函数没有参数。
randomize()函数没有返回值。
示例
本示例演示用randomize()函数初始化随机数发生器。其具体代码如下:
运行结果如图17.24所示。
图17.24 使用randomize()函数初始化随机数发生器 17.25 realloc()——重新分配主存函数 realloc()函数
实用程度:★★★★☆
实例位置:配套资源\SL\17\25
realloc()函数用于重新分配指定大小的内存空间。
语法
void realloc(void p, unsigned size);
realloc()函数的语法参数说明如下:
参数p为指向内存区的指针。
参数size为重新分配内存的大小。
realloc()函数的返回值:重新分配后内存块的指针。
示例
本示例演示用realloc()函数重新为d分配内存。其具体代码如下:
运行结果如图17.25所示。
图17.25 使用realloc()函数重新分配内存 17.26 srand()——初始化随机数发生器函数 srand()函数
实用程度:★★★★☆
实例位置:配套资源\SL\17\26
srand()函数用于初始化随机数发生器。
语法
void srand(unsigned seed);
srand()函数的语法参数说明如下:
参数seed为要设置随机时间的种子,其值为整数。
srand()函数没有返回值。
示例
本示例使用srand()函数产生不同的随机整数序列。其具体代码如下:
运行结果如图17.26所示。
图17.26 使用srand()函数初始化随机数发生器 17.27 strtod()——转换字符串函数 strtod()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\17\27
strtod()函数用于将字符串转换为浮点数。
语法
double strtod(char s, char *p);
strtod()函数的语法参数说明如下:
参数s为要转换的字符串。
参数p为一字符串指针,用于进行错误检测,遇到非法字符将终止。
strtod()函数的返回值:转换后的浮点型数据。
示例
本示例演示用strtod()函数将字符串“3.1415”转换成浮点数。其具体代码如下:
运行结果如图17.27所示。
图17.27 使用strtod()函数将字符串转换为浮点数 17.28 strtol()——转换字符串函数 strtol()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\17\28
strtol()函数用于将字符串转换成长整型数。
语法
long strtol(char s, char *ptr, int radix);
strtol()函数的语法参数说明如下:
参数s为要转换的字符串。
参数ptr为一字符串指针,用于进行错误检测,遇到非法字符将终止。
参数radix为采用的进制方式。
strtol()函数的返回值:转换后的长整型数。
示例
本示例演示用strtol()函数将字符串“10000”按照不同的进制方式转换为长整型值。其具体代码如下:
运行结果如图17.28所示。
图17.28 使用strtol()函数将字符串转换为长整型数 17.29 swab()——交换字节函数 swab()函数
实用程度:★★☆☆☆
实例位置:配套资源\SL\17\29
swab()函数用于从源和目标区域交换字节。
语法
void swab (char from, char to, int n);
swab()函数的语法参数说明如下:
参数from和to为要交换字节的字符串。
参数n为需要交换的字节数。
swab()函数没有返回值。
示例
本示例演示用swab()函数将字符串“imgnirb oo k”交换成“mingri book”。其具体代码如下:
运行结果如图17.29所示。
图17.29 使用swab()函数交换字符串字节 17.30 system()——发出DOS命令函数 system()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\17\30
system()函数用于发出一个DOS命令。
语法
int system(char *command);
system()函数的语法参数说明如下:
参数command为需要执行的DOS命令。
system()函数的返回值:执行成功返回0,否则返回-1。
示例
本示例演示用system()函数执行DOS命令。其具体代码如下:
运行结果如图17.30所示。
图17.30 使用system()函数执行DOS命令