第17章 标准工具库函数库:stdlib.h 对于一些特殊的操作,C语言提供了标准工具库函数库(stdlib.h),其中包括可以实现数值转换、内存分配、随机数操作以及字符串转换等的函数。 17.1 abort()——异常终止进程函数 abort()函数

    实用程度:★★★☆☆

    实例位置:配套资源\SL\17\01

    abort()函数用于写一个终止信息到stderr,并异常终止程序。

    语法

    void abort(void);

    abort()函数没有参数。

    abort()函数没有返回值。

    示例

    本示例演示用abort()函数异常终止一个进程,并输出信息“Abnormal program termination”。其具体代码如下:

    img670

    运行结果如图17.1所示。

    img671

    图17.1 使用abort()函数终止程序 17.2 atexit()——注册终止函数 atexit()函数

    实用程度:★★★☆☆

    实例位置:配套资源\SL\17\02

    atexit()函数用于注册终止。

    语法

    int atexit(atexit_t fc);

    atexit()函数的语法参数说明如下:

    参数fc为指向终止处理函数的指针。

    atexit()函数的返回值:成功调用返回0,否则返回非0值。

    示例

    本示例演示用atexit()函数实现程序终止时,调用注册出口函数f1()和f2()。其具体代码如下:

    img672

    运行结果如图17.2所示。

    img673

    图17.2 使用atexit()函数调用注册出口函数 17.3 atof()——转换字符串函数 atof()函数

    实用程度:★★★★☆

    实例位置:配套资源\SL\17\03

    atof()函数用于将字符串转换为浮点值。

    语法

    double atof(const char *s);

    atof()函数的语法参数说明如下:

    参数s为要转换的字符串。

    atof()函数的返回值:转换后的浮点值。

    示例

    本示例演示用atof()函数将字符串“5257.1314”转换成浮点值,并输出字符串和转换的浮点型值。其具体代码如下:

    img674

    运行结果如图17.3所示。

    img675

    图17.3 使用atof()函数实现字符串转换 17.4 atoi()——转换字符串函数 atoi()函数

    实用程度:★★★★☆

    实例位置:配套资源\SL\17\04

    atoi()函数用于将字符串转换成整型数。

    语法

    int atoi(const char *s);

    atoi()函数的语法参数说明如下:

    参数s为要转换的字符串。

    atoi()函数的返回值:转换后的整型值。

    示例

    本示例演示用atoi()函数将字符串“5257.1314”转换成整型值,并输出字符串和转换的整型值。其具体代码如下:

    img676

    运行结果如图17.4所示。

    img677

    图17.4 使用atoi()函数实现字符串转换 17.5 atol()——转换字符串函数 atol()函数

    实用程度:★★★★☆

    实例位置:配套资源\SL\17\05

    atol()函数用于将字符串转换成长整型值。

    语法

    long atol(const char *s);

    atol()函数的语法参数说明如下:

    参数s为要转换的字符串。

    atol()函数的返回值:转换后的长整型值。

    示例

    本示例演示用atol()函数将字符串“525713.14”转换成长整型值,并输出字符串和转换的长整型值。其具体代码如下:

    img678

    img679

    运行结果如图17.5所示。

    img680

    图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 参数说明

    img681

    bsearch()函数没有返回值。

    示例

    本示例演示用bsearch()函数实现二分法搜索元素456。其具体代码如下:

    img682

    img683

    运行结果如图17.6所示。

    img684

    图17.6 使用bsearch()函数实现二分法搜索元素 17.7 calloc()——分配主存储器函数 calloc()函数

    实用程度:★★★☆☆

    实例位置:配套资源\SL\17\07

    calloc()函数用于分配主存储器。

    语法

    void *calloc(size_t n, size_t s);

    calloc()函数的语法参数说明如下:

    参数n为要分配空间的个数。

    参数s为要分配空间的字节数。

    calloc()函数的返回值:所分配内存的指针。

    示例

    本示例演示用calloc()函数为输入的元素动态分配内存空间。其具体代码如下:

    img685

    img686

    运行结果如图17.7所示。

    img687

    图17.7 使用calloc()函数动态分配内存 17.8 div()——整数相除函数 div()函数

    实用程度:★★★★☆

    实例位置:配套资源\SL\17\08

    div()函数用于两整数相除。

    语法

    div_t (int x, int y);

    div()函数的语法参数说明如下:

    参数x为被除数。

    参数y为除数。

    div()函数的返回值:商和余数。

    示例

    本示例演示用div()函数求两个整数210和25相除的商和余数。其具体代码如下:

    img688

    运行结果如图17.8所示。

    img689

    图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 参数说明

    img690

    ecvt()函数的返回值:字符串指针。

    示例

    本示例演示用ecvt()函数将5.21、-103.23、0.1234e5转换成字符串,并将其输出。其具体代码如下:

    img691

    img692

    运行结果如图17.9所示。

    img693

    图17.9 将浮点数转换成字符串 17.10 exit()——终止程序函数 exit()函数

    实用程度:★★★☆☆

    实例位置:配套资源\SL\17\10

    exit()函数用于正常终止程序。

    语法

    void exit(int status);

    exit()函数的语法参数说明如下:

    参数status为终止状态。

    exit()函数没有返回值。

    示例

    本示例演示用exit()函数正常终止一个程序,其后面的语句将不被执行。其具体代码如下:

    img694

    运行结果如图17.10所示。

    img695

    图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 参数说明

    img696

    fcvt()函数的返回值:字符串指针。

    示例

    本示例演示用fcvt()函数将5.21、-103.23、0.1234e5转换成字符串,并将其输出。其具体代码如下:

    img697

    运行结果如图17.11所示。

    img698

    图17.11 使用fcvt()函数将浮点数转换成字符串 17.12 free()——释放已分配块函数 free()函数

    实用程度:★★★★☆

    实例位置:配套资源\SL\17\12

    free()函数用于释放已分配的内存块。

    语法

    void free(void *block);

    free()函数的语法参数说明如下:

    参数block为已分配的内存块。

    free()函数没有返回值。

    示例

    本示例演示用free()函数释放已分配的内存空间。其具体代码如下:

    img699

    运行结果如图17.12所示。

    img700

    图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转换为字符串,并将其输出。其具体代码如下:

    img701

    运行结果如图17.13所示。

    img702

    图17.13 使用gcvt()函数将浮点数转换为字符串 17.14 getenv()——获取环境中字符串函数 getenv()函数

    实用程度:★★★☆☆

    实例位置:配套资源\SL\17\14

    getenv()函数用于获取当前环境中的字符串。

    语法

    char getenv(char name);

    getenv()函数的语法参数说明如下:

    参数name为环境变量名。

    getenv()函数的返回值:给定的环境变量值,如果指定的变量在环境中未定义,则返回NULL。

    示例

    本示例演示用getenv()函数获取名为COMSPEC的环境字符串的首地址,并将其显示出来。其具体代码如下:

    img703

    运行结果如图17.14所示。

    img704

    图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转换为字符串并输出结果。其具体代码如下:

    img705

    运行结果如图17.15所示。

    img706

    图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相除的商和余数。其具体代码如下:

    img707

    img708

    运行结果如图17.16所示。

    img709

    图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 参数说明

    img710

    lfind()函数的返回值:若找到关键数据则返回找到的该元素的地址,否则返回NULL。

    示例

    本示例演示用lfind()函数实现在数组a中线性搜索元素68。其具体代码如下:

    img711

    img712

    运行结果如图17.17所示。

    img713

    图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 参数说明

    img714

    lsearch()函数的返回值:若找到关键数据,则返回找到元素的地址;若所找数据不在查找区域,则将此数据加入到查找区域,再把加入后的地址返回。

    示例

    本示例演示用lsearch()函数实现在数组a中线性搜索元素27,并将新元素加入到数组中。其具体代码如下:

    img715

    运行结果如图17.18所示。

    img716

    图17.18 使用lsearch()函数实现线性搜索 17.19 malloc()——内存分配函数 malloc()函数

    实用程度:★★★★☆

    实例位置:配套资源\SL\17\19

    malloc()函数用于分配指定大小的内存空间。

    语法

    void *malloc(unsigned size);

    malloc()函数的语法参数说明如下:

    参数size为要分配空间的大小。

    malloc()函数的返回值:所分配内存的指针。

    示例

    本示例演示用malloc()函数为字符串“good luck!”动态分配内存。其具体代码如下:

    img717

    运行结果如图17.19所示。

    img718

    图17.19 使用malloc()函数动态分配内存 17.20 putenv()——加载环境中字符串函数 putenv()函数

    实用程度:★★☆☆☆

    实例位置:配套资源\SL\17\20

    putenv()函数用于改变或增加环境变量的内容。

    语法

    int putenv(char *name);

    putenv()函数的语法参数说明如下:

    参数name为环境变量名。

    putenv()函数的返回值:执行成功返回0,否则返回-1。

    示例

    本示例演示用putenv()函数将环境变量进行拼接字符串,然后将其替换为原来的环境变量。其具体代码如下:

    img719

    运行结果如图17.20所示。

    img720

    图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 参数说明

    img721

    qsort()函数没有返回值。

    示例

    本示例演示用qsort()函数对无序序列a进行快速排序。其具体代码如下:

    img722

    img723

    运行结果如图17.21所示。

    img724

    图17.21 使用qsort()函数实现快速排序 17.22 rand()——随机数发生器函数 rand()函数

    实用程度:★★★☆☆

    实例位置:配套资源\SL\17\22

    rand()函数用于生成随机数。

    语法

    void rand(void);

    rand()函数没有参数。

    rand()函数的返回值:产生的随机整数。

    示例

    本示例演示用rand()函数产生5个随机的两位数。其具体代码如下:

    img725

    运行结果如图17.22所示。

    img726

    图17.22 使用rand()函数生成随机数 17.23 random()——随机数发生器函数 random()函数

    实用程度:★★★☆☆

    实例位置:配套资源\SL\17\23

    random()函数用于按给定的最大值生成随机数。

    语法

    int random(int num);

    random()函数的语法参数说明如下:

    参数num为生成的随机数的最大值。

    random()函数的返回值:不大于指定大小的随机数。

    示例

    本示例演示用random()函数生成指定大小的随机数。其具体代码如下:

    img727

    运行结果如图17.23所示。

    img728

    图17.23 使用random()函数生成随机数 17.24 randomize()——随机数发生器函数 randomize()函数

    实用程度:★★★☆☆

    实例位置:配套资源\SL\17\24

    randomize()函数用于初始化随机数发生器。

    语法

    void randomize(void);

    randomize()函数没有参数。

    randomize()函数没有返回值。

    示例

    本示例演示用randomize()函数初始化随机数发生器。其具体代码如下:

    img729

    运行结果如图17.24所示。

    img730

    图17.24 使用randomize()函数初始化随机数发生器 17.25 realloc()——重新分配主存函数 realloc()函数

    实用程度:★★★★☆

    实例位置:配套资源\SL\17\25

    realloc()函数用于重新分配指定大小的内存空间。

    语法

    void realloc(void p, unsigned size);

    realloc()函数的语法参数说明如下:

    参数p为指向内存区的指针。

    参数size为重新分配内存的大小。

    realloc()函数的返回值:重新分配后内存块的指针。

    示例

    本示例演示用realloc()函数重新为d分配内存。其具体代码如下:

    img731

    运行结果如图17.25所示。

    img732

    图17.25 使用realloc()函数重新分配内存 17.26 srand()——初始化随机数发生器函数 srand()函数

    实用程度:★★★★☆

    实例位置:配套资源\SL\17\26

    srand()函数用于初始化随机数发生器。

    语法

    void srand(unsigned seed);

    srand()函数的语法参数说明如下:

    参数seed为要设置随机时间的种子,其值为整数。

    srand()函数没有返回值。

    示例

    本示例使用srand()函数产生不同的随机整数序列。其具体代码如下:

    img733

    img734

    运行结果如图17.26所示。

    img735

    图17.26 使用srand()函数初始化随机数发生器 17.27 strtod()——转换字符串函数 strtod()函数

    实用程度:★★★☆☆

    实例位置:配套资源\SL\17\27

    strtod()函数用于将字符串转换为浮点数。

    语法

    double strtod(char s, char *p);

    strtod()函数的语法参数说明如下:

    参数s为要转换的字符串。

    参数p为一字符串指针,用于进行错误检测,遇到非法字符将终止。

    strtod()函数的返回值:转换后的浮点型数据。

    示例

    本示例演示用strtod()函数将字符串“3.1415”转换成浮点数。其具体代码如下:

    img736

    img737

    运行结果如图17.27所示。

    img738

    图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”按照不同的进制方式转换为长整型值。其具体代码如下:

    img739

    img740

    运行结果如图17.28所示。

    img741

    图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”。其具体代码如下:

    img742

    运行结果如图17.29所示。

    img743

    图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命令。其具体代码如下:

    img744

    运行结果如图17.30所示。

    img745

    图17.30 使用system()函数执行DOS命令