1、318附录 C C 语言常用的库函数库函数并不是 C 语言的一部分,它是由编译系统根据一般用户的需要编制并提供给用户使用的一组程序。每一种 C 编译系统都提供了一批库函数,不同的编译系统所提供的库函数的数目和函数名以及函数功能是不完全相同的。ANSI C 标准提出了一批建议提供的标准库函数。它包括了目前多数 C 编译系统所提供的库函数,但也有一些是某些 C 编译系统未曾实现的。考虑到通用性,本附录列出 ANSI C 建议的常用库函数。由于 C 库函数的种类和数目很多,例如还有屏幕和图形函数、时间日期函数、与系统有关的函数等,每一类函数又包括各种功能的函数,限于篇幅,本附录不能全部介绍,只从教学
2、需要的角度列出最基本的。读者在编写 C 程序时可根据需要,查阅有关系统的函数使用手册。1数学函数使用数学函数时,应该在源文件中使用预编译命令:#include 或#include “math.h“函数名 函数原型 功能 返回值acos double acos(double x); 计算 arccos x 的值,其中-1或#include “ctype.h“函数名 函数原型 功能 返回值isalnum int isalnum(int ch); 检查 ch 是否字母或数字 是字母或数字返回 1,否则返回 0isalpha int isalpha(int ch); 检查 ch 是否字母 是字母返回
3、1,否则返回 0iscntrl int iscntrl(int ch);检查 ch 是否控制字符(其 ASCII 码在 0 和 0xlF之间,数值为 0-31)是控制字符返回 1,否则返回 0320isdigit int isdigit(int ch); 检查 ch 是否数字(0-9) 是数字返回 1,否则返回 0isgraph int isgraph(int ch);检查 ch 是否是可打印(显示)字符(0x21 和0x7e 之间),不包括空格是可打印字符返回非0,否则返回 0islower int islower(int ch); 检查 ch 是否是小写字母(az) 是小字母返回非 0,否
4、则返回 0isprint int isprint(int ch);检查 ch 是否是可打印字符(其 ASCII 码在 0x21和 0x7e 之间),包括空格是可打印字符返回 1,否则返回 0ispunct int ispunct(int ch);检查 ch 是否是标点字符(不包括空格)即除字母、数字和空格以外的所有可打印字符是标点返回 1,否则返回 0isspace int isspace(int ch); 检查 ch 是否空格、跳格符(制表符)或换行符 是,返回 1,否则返回0isupper int isupper(int ch); 检查 ch 是否大写字母(AZ) 是大写字母返回 1,否则
5、返回 0isxdigit int isxdigit(int ch);检查 ch 是否一个 16 进制数字(即 09,或 A 到F,af)是,返回 1,否则返回0tolower int tolower(int ch); 将 ch 字符转换为小写字母 返回 ch 对应的小写字母toupper int toupper(int ch); 将 ch 字符转换为大写字母 返回 ch 对应的大写字母isascii int isascii(int ch) 测试参数是否是 ASCII 码 0-127 是返回非 0,否则返回 03字符串函数使用字符串中函数时,应该在源文件中使用预编译命令:#include 或#i
6、nclude “string.h“函数名 函数原型 功能 返回值memchrvoid memchr(void *buf, char ch, unsigned count);在 buf 的前 count 个字符里搜索字符 ch 首次出现的位置返回指向 buf 中 ch 的第一次出现的位置指针。若没有找到 ch,返回NULLmemcmpint memcmp(void *buf1, void *buf2, unsigned count);按字典顺序比较由buf1 和 buf2 指向的数组的前 count 个字符buf1buf2,为正数321memcpyvoid *memcpy(void *to, v
7、oid *from, unsigned count);将 from 指向的数组中的前 count 个字符拷贝到 to 指向的数组中。From 和 to 指向的数组不允许重叠返回指向 to 的指针memovevoid *memove(void *to, void *from, unsigned count);将 from 指向的数组中的前 count 个字符拷贝到 to 指向的数组中。From 和 to 指向的数组不允许重叠返回指向 to 的指针memsetvoid *memset(void *buf, char ch, unsigned count);将字符 ch 拷贝到 buf指向的数组前
8、count 个字符中。返回 bufstrcatchar *strcat(char *str1, char *str2);把字符 str2 接到 str1后面,取消原来 str1最后面的串结束符“0”返回 str1strchr char *strchr(char *str,int ch);找出 str 指向的字符串中第一次出现字符 ch的位置返回指向该位置的指针,如找不到,则应返回NULLstrcmpint *strcmp(char *str1, char *str2);比较字符串 str1 和str2若 str1str2,为正数strcpychar *strcpy(char *str1, ch
9、ar *str2);把 str2 指向的字符串拷贝到 str1 中去 返回 str1strlenunsigned intstrlen(char *str);统计字符串 str 中字符的个数(不包括终止符“0”)返回字符个数strncatchar *strncat(char *str1, char *str2, unsigned count);把字符串 str2 指向的字符串中最多 count 个字符连到串 str1 后面,并以 NULL 结尾返回 str1strncmpint strncmp(char *str1,*str2, unsigned count);比较字符串 str1 和str2
10、中至多前 count个字符若 str1str2,为正数strncpychar *strncpy(char *str1,*str2, unsigned count);把 str2 指向的字符串中最多前 count 个字符拷贝到串 str1 中去返回 str1strnsetvoid *setnset(char *buf, char ch, unsigned count);将字符 ch 拷贝到 buf指向的数组前 count 个字符中。返回 buf322strset void *setset(void *buf, char ch);将 buf 所指向的字符串中的全部字符都变为字符 ch返回 bufs
11、trstr char *strstr(char *str1,*str2);寻找 str2 指向的字符串在 str1 指向的字符串中首次出现的位置返回 str2 指向的字符串首次出向的地址。否则返回 NULLstrnicmpintstrnicmp(char *str1, char *str2, unsigned maxlen);将一个串中的一部分与另一个串比较, 不管大小写strcspnInt strcspn(char *str1, char *str2);在串中查找第一个给定字符集内容的段strdup char *strdup(char *str); 将串拷贝到新建的位置处strpbrk ch
12、ar *strpbrk(char *str1, char *str2);在串中查找给定字符集中的字符strrchr char *strrchr(char *str, char c);在串中查找指定字符的最后一个出现strrev char *strrev(char *str); 串倒转Strtod(strtol) double strtod(char *str, char *endptr);将字符串转换为 double型值,strtol 为长整型swabvoid swab (char *from, char *to, int nbytes); 交换字节4输入输出函数在使用输入输出函数时,应该在源
13、文件中使用预编译命令:#include 或#include “stdio.h“函数名 函数原型 功能 返回值clearerr void clearer(FILE *fp); 清除文件指针错误指示器 无close int close(int fp); 关闭文件(非 ANSI 标准) 关闭成功返回 0,不成功返回-1creatint creat(char *filename, int mode);以 mode 所指定的方式建立文件(非 ANSI 标准) 成功返回正数,否则返回-1323eof int eof(int fp); 判断 fp 所指的文件是否结束 文件结束返回 1,否则返回 0fclos
14、e int fclose(FILE *fp); 关闭 fp 所指的文件,释放文件缓冲区 关闭成功返回 0,不成功返回非 0feof int feof(FILE *fp); 检查文件是否结束 文件结束返回非 0,否则返回 0ferror int ferror(FILE *fp); 测试 fp 所指的文件是否有错误 无错返回 0,否则返回非 0fflush int fflush(FILE *fp); 将 fp 所指的文件的全部控制信息和数据存盘 存盘正确返回 0,否则返回非 0fgetschar *fgets(char *buf, int n, FILE *fp);从 fp 所指的文件读取一个长度
15、为(n-1)的字符串,存入起始地址为buf 的空间返回地址 buf。若遇文件结束或出错则返回EOFfgetc int fgetc(FILE *fp); 从 fp 所指的文件中取得下一个字符 返回所得到的字符。出错返回 EOFfopenFILE *fopen(char *filename, char *mode);以 mode 指定的方式打开名为 filename 的文件成功,则返回一个文件指针,否则返回 0fprintfint fprintf(FILE *fp, char *format,args,);把 args 的值以 format指定的格式输出到 fp所指的文件中实际输出的字符数fput
16、c int fputc(char ch, FILE *fp); 将字符 ch 输出到 fp 所指的文件中 成功则返回该字符,出错返回 EOFfputs int fputs(char str, FILE *fp); 将 str 指定的字符串输出到 fp 所指的文件中 成功则返回 0,出错返回 EOFfreadint fread(char *pt, unsigned size, unsigned n, FILE *fp);从 fp 所指定文件中读取长度为 size 的 n 个数据项,存到 pt 所指向的内存区返回所读的数据项个数,若文件结束或出错返回0fscanfint fscanf(FILE *
17、fp, char *format,args,);从 fp 指定的文件中按给定的 format 格式将读入的数据送到 args所指向的内存变量中(args 是指针)以输入的数据个数fseekint fseek(FILE *fp, long offset, int base);将 fp 指定的文件的位置指针移到 base 所指出的位置为基准、以offset 为位移量的位置返回当前位置,否则返回-1ftell long ftell(FILE *fp); 返回 fp 所指定的文件中的读写位置 返回文件中的读写位置,否则返回 0324fwriteint fwrite(char *ptr, unsigne
18、d size, unsigned n, FILE *fp);把 ptr 所指向的 n*size个字节输出到 fp 所指向的文件中写到 fp 文件中的数据项的个数getc int getc(FILE *fp); 从 fp 所指向的文件中的读出下一个字符 返回读出的字符,若文件出错或结束返回 EOFgetchar int getchar(); 从标准输入设备中读取下一个字符 返回字符,若文件出错或结束返回-1gets char *gets(char *str);从标准输入设备中读取字符串存入 str 指向的数组成功返回 str,否则返回 NULLopenint open(char *filenam
19、e, int mode);以 mode 指定的方式打开已存在的名为filename 的文件(非ANSI 标准)返回文件号(正数),如打开失败返回-1printf int printf(char *format,args,);在 format 指定的字符串的控制下,将输出列表 args 的指输出到标准设备输出字符的个数。若出错返回负数prtc int prtc(int ch, FILE *fp); 把一个字符 ch 输出到fp 所值的文件中 输出字符 ch,若出错返回 EOFputchar int putchar(char ch); 把字符 ch 输出到 fp 标准输出设备 返回换行符,若失败返
20、回 EOFputs int puts(char *str);把 str 指向的字符串输出到标准输出设备,将“0”转换为回车行返回换行符,若失败返回 EOFputw int putw(int w, FILE *fp);将一个整数 i(即一个字)写到 fp 所指的文件中(非 ANSI 标准)返回读出的字符,若文件出错或结束返回 EOFreadint read(int fd, char *buf, unsigned count);从文件号 fp 所指定文件中读 count 个字节到由 buf 知识的缓冲区(非 ANSI 标准)返回真正读出的字节个数,如文件结束返回0,出错返回-1remove int
21、 remove(char *fname); 删除以 fname 为文件名的文件 成功返回 0,出错返回-1renameint remove(char *oname, char *nname);把 oname 所指的文件名改为由 nname 所指的文件名成功返回 0,出错返回-1rewind void rewind(FILE *fp);将 fp 指定的文件指针置于文件头,并清除文件结束标志和错误标志无325scanf int scanf(char *format,args,);从标准输入设备按format 指示的格式字符串规定的格式,输入数据给 args 所指示的单元。args 为指针读入并赋给
22、 args 数据个数。如文件结束返回EOF,若出错返回 0writeint write(int fd, char *buf, unsigned count);丛 buf 指示的缓冲区输出 count 个字符到 fd所指的文件中(非 ANSI标准)返回实际写入的字节数,如出错返回-15动态存储分配函数在使用动态存储分配函数时,应该在源文件中使用预编译命令:#include 或#include “stdlib.h“函数名 函数原型 功能 返回值calllocvoid *calloc(unsigned n, unsigned size);分配 n 个数据项的内存连续空间,每个数据项的大小为 size
23、分配内存单元的起始地址。如不成功,返回 0free void free(void *p); 释放 p 所指内存区 无mallocvoid *malloc(unsigned size);分配 size 字节的内存区 所分配的内存区地址,如内存不够,返回 0realloc void *realloc(void *p, unsigned size);将 p 所指的以分配的内存区的大小改为size。size 可以比原来分配的空间大或小返回指向该内存区的指针。若重新分配失败,返回 NULL6其他函数有些函数由于不便归入某一类,所以单独列出。使用这些函数时,应该在源文件中使用预编译命令:#include
24、或#include “stdlib.h“函数名 函数原型 功能 返回值abs int abs(int num); 计算整数 num 的绝对值 返回计算结果atof double atof(char *str); 将 str 指向的字符串转换为一个 double 型的值 返回双精度计算结果atoi int atoi(char *str); 将 str 指向的字符串转换为一个 int 型的值 返回转换结果atol long atol(char *str); 将 str 指向的字符串转换为一个 long 型的值 返回转换结果326exit void exit(int status);中止程序运行。将
25、status 的值返回调用的过程无itoachar *itoa(int n, char *str, int radix);将整数 n 的值按照 radix进制转换为等价的字符串,并将结果存入 str指向的字符串中返回一个指向 str的指针labs long labs(long num); 计算 long 型整数 num 的绝对值 返回计算结果ltoachar *ltoa(long n, char *str, int radix);将长整数 n 的值按照radix 进制转换为等价的字符串,并将结果存入str 指向的字符串返回一个指向 str的指针rand int rand(void);产生 0
26、到 32767 间的随机整数(0 到 0x7fff 之间) 返回一个伪随机(整)数random int random(int num); 产生 0 到 num 之间的随机数。 返回一个随机(整)数randomize void randomize(); 初始化随机函数,使用时包括头文件 time.h。putenv int putenv(const char *name) 将字符串 name 增加到DOS 环境变量中 0:操作成功,-1:操作失败ecvt char *ecvt(double value,int ndigit,int *dec,int *sign)将浮点数转换为字符串value-待转换底浮点数,ndigit-转换后的字符串长度转换后的字符串指针