(13.3.1)--C常用库函数.pdf
附录附录 C:C:C C 常用库函数常用库函数 库函数并不是 C 语言的一部分,它是由编译程序根据一般用户的需要编制并提供用户使用的一组程序。每一种 C 编译系统都提供了一批库函数,不同的编译系统所提供的库函数的数目和函数名以及函数功能是不完全相同的。ANSI C 标准提出了一批建议提供的标准库函数,它包括了目前多数 C 编译系统所提供的库函数,但也有一些是某些 C 编译系统未曾实现的。考虑到通用性,本书列出 ANSI C 标准建议提供的、常用的部分库函数。对多数 C 编译系统,可以使用这些函数的绝大部分。由于 C 库函数的种类和数目很多(例如,还有屏幕和图形函数、时间日期函数、与系统有关的函数等,每一类函数又包括各种功能的函数),限于篇幅,本附录不能全部介绍,只从教学需要的角度列出最基本的。读者在编制 C 程序时可能要用到更多的 函数,请查阅所用系统的手册。(1)数学函数 使用数学函数时,应该在源文件中使用命令:#includemathh 函数名 函数原型 功 能 返回值 acos double acos(double x)计算 cos-1(x)的值-1=x=1 计算结果 asin double asin(double x)计算 sin-1(x)的值-1=x=1 计算结果 atan double atan(double x)计算 tan-1(x)的值 计算结果 atan2 double atan2(double x,double y)计算 tan-1(x/y)的值 计算结果 cos double cos(double x)计算 cos(x)的值 x 的单位为弧度 计算结果 cosh double cosh(double x)计算 x 的双曲余弦 cosh(x)的值 计算结果 exp double exp(double x)求 ex的值 计算结果 fabs double fabs(double x)求 x 的绝对值 计算结果 floor double floor(double x)求出不大于 x 的最大整数 该整数的双精度实数 fmod double fmod(double x,double y)求整除 x/y 的余数 返回余数的双精度实数 frexp double frexp(double val,int *eptr)把双精度数 val 分解成数字部分(尾数)和以 2 为底的指数,即val=x*2n,n存放在eptr指向的变量中 数字部分 x 0.5=x1 log double log(double x)求 logex 即 lnx 计算结果 log10 double log10(double x)求 log10 x 计算结果 modf double modf(double val,int *iptr)把双精度数 val 分解成数字部分和小数部分,把整数部分存放在 iptr 指向的单元中 val 的小数部分 pow double pow(double x,double y)求 xy的值 计算结果 sin double sin(double x)求 sin(x)的值 x 的单位为弧度 计算结果 sinh double sinh(double x)计算 x 的双曲正弦函数sinh(x)的值 计算结果 sqrt double sqrt(double x)计算x,x0 计算结果 tan double tan(double x)计算 tan(x)的值 x 的单位为弧度 计算结果 tanh double tanh(double x)计算 x 的双曲正切函数tanh(x)的值 计算结果 (2)字符函数 在使用字符函数时,因该在源文件中使用命令:#include“ctypeh”函数名 函数和形参类型 功能 返回值 isalnum int isalnum(int ch)检查 ch 是否字母或数字 是字母或数字返回 1;否则返回 0 isalpha int isalpha(int ch)检查 ch 是否字母 是字母返回 1;否则返回 0 iscntrl int iscntrl(int ch)检查 ch 是否控制字符(其 ASC码在 0 和 0 xlF 之间)是控制字符返回 1;否则返回 0 isdigit int isdigit(int ch)检查 ch 是否数字 是数字返回 1;否则返回 0 isgraph int isgraph(int ch)检查 ch 是否是可打印字符(其ASC码在 0 x21 和 0 x7e 之间),不包括空格 是可打印字符返回 1;否则返回 0 islower int islower(int ch)检查 ch 是否是小写字母(az)是小字母返回 1;否则返回0 isprint int isprint(int ch)检查 ch 是否是可打印字符(其ASC码在 0 x21 和 0 x7e 之间),不包括空格 是可打印字符返回 1;否则返回 0 ispunct int ispunct(int ch)检查 ch 是否是标点字符(不包括空格)即除字母、数字和空格以外的所有可打印字符 是标点返回 1;否则返回 0 isspace int isspace(int ch)检查 ch 是否空格、跳格符(制表符)或换行符 是,返回 1;否则返回 0 issupper int isalsupper(int ch)检查 ch 是否大写字母(AZ)是大写字母返回 1;否则返回 0 isxdigit int isxdigit(int ch)检查 ch 是否一个 16 进制数字(即 09,或 A 到 F,af)是,返回 1;否则返回 0 tolower int tolower(int ch)将 ch 字符转换为小写字母 返回 ch 对应的小写字母 toupper int touupper(int ch)将 ch 字符转换为大写字母 返回 ch 对应的大写字母 (3)字符串函数 使用字符串中函数时,应该在源文件中使用命令:#include“stringh”函数名 函数和形参类型 功能 返回值 strcat char*strcat(char*str1,char*str2)把字符 str2 接到 str1 后面,取消原来 str1 最后面的串结束符0 返回 str1 strchr char*strchr(char *str1,int ch)找出 str 指向的字符串中第一次出现字符 ch 的位置 返回指向该位置的指针,如找不到,则应返回 NULL strcmp int*strcmp(char*str1,char*str2)比较字符串 str1 和 str2 str1str2,为正数 strcpy char*strcpy(char*str1,char*str2)把 str2 指向的字符串拷贝到str1 中去 返回 str1 strlen unsigned intstrlen(char*str)统计字符串 str 中字符的个数(不包括终止符0)返回字符个数 strncat char*strncat(char*str1,char*str2,unsigned int count)把字符串 str2 指向的字符串中最多 count 个字符连到串str1 后面,并以 null 结尾 返回 str1 strncmp int strncmp(char*str1,char*str2,unsigned int count)比较字符串 str1 和 str2 中至多前 count 个字符 str1str2,为正数 strncpy char*strncpy(char*str1,char*str2,unsigned int count)把 str2 指向的字符串中最多前 count 个字符拷贝到串 str1中去 返回 str1 strnset void*setnset(char*buf,char ch,unsigned int count)将字符 ch 拷贝到 buf 指向的数组前 count 个字符中。返回 buf strset void*setnset(void *buf,char ch)将 buf 所指向的字符串中的全部字符都变为字符 ch 返回 buf strstr char*strstr(char*str1,char*str2)寻找str2指向的字符串在str1指向的字符串中首次出现的位置 返回 str2 指向的字符串首次出向的地址。否则返回 NULL (4)输入输出函数 在使用输入输出函数时,应该在源文件中使用命令:#include“stdioh”函数名 函数和形参类型 功能 返回值 clearerr void clearer(FILE*fp)清除文件指针错误指示器 无 close int close(int fp)关闭文件(非 ANSI 标准)关闭成功返回 0,不成功返回-1 creat int creat(char*filename,int mode)以 mode 所指定的方式建立文件。(非 ANSI 标准)成功返回正数,否则返回-1 eof int eof(int fp)判断 fp 所指的文件是否结束 文件结束返回 1,否则返回 0 fclose int fclose(FILE*fp)关闭 fp 所指的文件,释放文件缓冲区 关闭成功返回 0,不成功返回非 0 feof int feof(FILE*fp)检查文件是否结束 文件结束返回非 0,否则返回 0 ferror int ferror(FILE*fp)测试 fp 所指的文件是否有错误 无错返回 0;否则返回非 0 fflush int fflush(FILE*fp)将 fp 所指的文件的全部控制信息和数据存盘 存盘正确返回 0;否则返回非 0 fgets char*fgets(char*buf,int n,FILE*fp)从 fp 所指的文件读取一个长度为(n-1)的字符串,存入起始地址为 buf 的空间 返回地址 buf;若遇文件结束或出错则返回 EOF fgetc int fgetc(FILE*fp)从 fp 所指的文件中取得下一个字符 返 回 所 得 到 的 字符;出错返回 EOF fopen FILE*fopen(filename,mode)char*filename,*mode 以 mode 指定的方式打开名为 filename 的文件 成功,则返回一个文件指针;否则返回 0 fprintf int fprintf(FILE*fp,char*format,args,)把 args 的值以 format 指定的格式输出到 fp 所指的文件中 实际输出的字符数 fputc int fputc(char ch,FILE*fp)将字符ch输出到fp所指的文件中 成 功 则 返 回 该 字符;出错返回 EOF fputs int fputs(char str,FILE*fp)将 str 指定的字符串输出到 fp所指的文件中 成功则返回 0;出错返回 EOF fread int fread(char*pt,unsigned size,unsigned n;FILE*fp)从 fp 所指定文件中读取长度为 size 的 n 个数据项,存到pt 所指向的内存区 返回所读的数据项个数,若文件结束或出错返回 0 fscanf int fscanf(FILE*fp,char*format,args,)从 fp 指定的文件中按给定的format 格式将读入的数据送到 args 所指向的内存变量中(args 是指针)以输入的数据个数 fseek int fseek(FILE*fp,long offset,int base)将 fp 指定的文件的位置指针移到 base 所指出的位置为基准、以 offset 为位移量的位置 返回当前位置;否则,返回-1 ftell long ftell(FILE*fp)返回 fp 所指定的文件中的读写位置 返回文件中的读写位置;否则,返回 0 fwrite int fwrite(char*ptr,unsigned size,unsigned n,FILE*fp)把 ptr所指向的n*size个字节输出到 fp 所指向的文件中 写到 fp 文件中的数据项的个数 getc int getc(FILE *fp)从 fp 所指向的文件中的读出下一个字符 返回读出的字符;若文件出错或结束返回 EOF getchar int getchat(void)从标准输入设备中读取下一个字符 返回字符;若文件出错或结束返回-1 gets char*gets(char*str)从标准输入设备中读取字符串存入 str 指向的数组 成功返回 str,否则返回 NULL open int open(char*filename,int mode)以 mode 指定的方式打开已存在的名为 filename 的文件(非 ANSI 标准)返回文件号(正数);如打开失败返回-1 printf int printf(char*format,args,)在 format 指定的字符串的控制下,将输出列表 args 的指输出到标准设备 输出字符的个数;若出错返回负数 putc int putc(int ch,FILE*fp)把一个字符ch输出到fp所值的文件中 输出字符 ch;若出错返回 EOF putchar int putchar(char ch)把字符ch输出到fp标准输出设备 返回换行符;若失败返回 EOF puts int puts(char *str)把 str 指向的字符串输出到标准输出设备;将0转换为回车行 返回换行符;若失败返回 EOF putw int putw(int w,FILE*fp)将一个整数 w(即一个字)写到 fp 所指的文件中(非 ANSI标准)返回读出的字符;若文件出错或结束返回 EOF read int read(int fd,char*buf,unsigned int count)从文件号 fp 所指定文件中读count 个字节到由 buf 知识的缓冲区(非 ANSI 标准)返回真正读出的字节个数,如文件结束返回 0,出错返回-1 remove int remove(char*fname)删除以 fname 为文件名的文件 成功返回 0;出错返回-1 rename int remove(char*oname,char*nname)把 oname 所指的文件名改为由 nname 所指的文件名 成功返回 0;出错返回-1 rewind void rewind(FILE*fp)将 fp 指定的文件指针置于文件头,并清除文件结束标志和错误标志 无 scanf int scanf(char*format,args,)从标准输入设备按 format 指示的格式字符串规定的格式,输入数据给 args 所指示的单元。args 为指针 读入并赋给 args 数据个数。如文件结束返回 EOF;若出错返回 0 write int write(int fd,char*buf,unsigned count)丛 buf 指示的缓冲区输出count 个字符到 fd 所指的文件中(非 ANSI 标准)返回实际写入的字节数,如出错返回-1 (5)动态存储分配函数 在使用动态存储分配函数时,应该在源文件中使用命令:#include“stdlibh”函数名 函数和形参类型 功能 返回值 callloc void*calloc(unsigned n,unsigned size)分配 n 个数据项的内存连续空间,每个数据项的大小为size 分配内存单元的起始地址。如不成功,返回 0 free void free(void *p)释放 p 所指内存区 无 malloc void*malloc(unsigned size)分配 size 字节的内存区 所分配的内存区地址,如内存不够,返回 0 realloc void*reallod(void*p,unsigned size)将 p 所指的以分配的内存区的大小改为 size。Size 可以比原来分配的空间大或小 返回指向该内存区的指针。若重新分配失败,返回 NULL