C语言参考手册之函数库Ver:1.0Date:2005-8-19LW7807@163.com制作摘录自《C程序设计语言(第二版)》K&R著徐宝文等译版权属原作者和出版社所有-1/15-版权说明:本资料内容摘录自《C程序设计语言(第二版)》K&R著徐宝文李志译尤晋元审校机械工业出版社出版一书。版权属原作者和出版社所有。制作本资料为了我本人学习和参考,非商业用途。建议读者阅读原书学习比较好,它更详细。目录:附录B:标准库介绍标准库的组成,及使用注意。B.1输入与输出:stdio.h主要介绍流的概念等。B.1.1文件操作主要介绍fopen(),freopen(),fflush(),fclose(),remove(),rename(),tmpfile(),tmpnam(),setvbuf(),setbuf()等。B.1.2格式化输出主要介绍printf(),fprintf(),sprintf(),vprintf(),vfprintf(),vsprintf()等。B.1.3格式化输入主要介绍fscanf(),scanf(),sscanf()等。B.1.4字符输入/输出函数主要介绍fgetc(),fgets(),fputc(),fputs(),getc(),gets(),putc(),puts(),putchar(),ungetc()等。B.1.5直接输入输出主要介绍fread()和fwrite()。B.1.6文件定位函数主要介绍fseek(),ftell(),rewind(),fgetpos(),fsetpos()等。B.1.7错误处理函数主要介绍clearerr(),feof(),ferror(),perror()等。B.2字符类别测试:ctype.h主要介绍isalnum(c),isalpha(c),iscntrl(c),isdigit(c),…,tolower(c),toupper(c)等。B.3字符串函数:string.h主要介绍strcpy(),strncpy(),strcat(),strncat(),strcmp(),strncmp(),strchar(),strrchr(),strspn(),strcspn(),strpbrk(),strstr(),strlen(),strerror(),strtok()等。B.4数学函数:math.h主要介绍sin(),cos(),tan(),asin(),acos(),atan(),atan2(),sinh(),cosh(),tanh(),exp()log(),log10(),pow(),sqrt(),ceil(),floor(),fabs(),ldexp(),frexp(),modf(),fmod()等。B.5实用函数:stdlib.h主要介绍atof(),atoi(),atol(),strtod(),strtoul(),rand(),srand(),calloc(),malloc(),realloc(),free(),abort(),exit(),atexit(),system(),getenv(),bsearch(),qsort(),abs(),labs(),div(),ldiv()等。B.6诊断:assert.h主要介绍assert()。B.7可变参数表:stdarg.h主要介绍va_list,va_start,va_end。B.8非局部跳转:setjmp.h主要介绍setjmp(),longjmp()等。B.9信号:signal.h主要介绍signal(),raise()等。B.10日期与时间函数:time.h主要介绍clock(),time(),difftime(),mktime(),asctime(),ctime(),strftime()等。B.11与具体实现相关的限制:limits.h和folat.h主要介绍整型大小的常量,浮点运算的一些常量。C语言参考手册之函数库Ver:1.0Date:2005-8-19LW7807@163.com制作摘录自《C程序设计语言(第二版)》K&R著徐宝文等译版权属原作者和出版社所有-2/15-附录B:标准库返回目录本附录总结了ANSI标准定义的函数库。标准库不是C语言本身的构成部分,但是支持标准C的实现会提供该函数库中的函数声明、类型及宏定义。在这部分内容中,我们省略了一些使用比较受限的函数以及一些可以通过其他函数简单合成的函数,也省略了多字节字符的内容,同时,也不准备讨论与区域相关的一些属性,也就是与本地语言、国籍或文化相关的属性。标准库中的函数、类型以及宏分别在下面的标准头文件中定义:assert.hfloat.hmath.hstdarg.hstdlib.hctype.hlimits.hsetjmp.hstddef.hstring.herrno.hlocal.hsignal.hstdio.htime.h可以通过下列方式访问头文件:#include头文件头文件的包含顺序是任意的,并可包含任意多次。头文件必须被包含在任何外部声明或定义之外,并且,必须在使用头文件中的任何声明之前包含头文件。头文件不一定是一个源文件。以下划线开头的外部标识符保留给标准库使用,同时,其他所有以一个下划线和一个大写字母开头的标识符以及两个下划线开头的标识符也都保留给标准库使用。B.1输入输出:stdio.h返回目录头文件stdio.h中定义的输入和输出函数、类型以及宏的数目几乎占整个标准库的三分之一。流(stream)是与磁盘或其他外围设备关联的数据的源或目的地。尽管在某些系统中(如著名的UNIX系统中),文本流和二进制流是相同的,但标准库仍然提供了这两种类型的流。文本流是由文本行组成的序列,每行包含0个或多个字符,并以‘\n’结尾。在某些环境中,可能需要将文本流转换为其他表示形式(例如把‘\n’映射成回车符和换行符),或从其他表示形式转换为文本流。二进制流是由未经处理的字节构成的序列,这些字节记录着内部数据,并具有下列性质:如果在同一系统中写入二进制流,然后再读取该二进制流,则读出和写入的内容完全相同。打开一个流,将把流与一个文件或设备连接起来,关闭流将断开这种连接。打开一个文件将返回一个指向FILE类型对象的指针,该指针记录了控制该流的所有必要信息。在不引起歧义的情况下,我们在下文中将不再区分“文件指针”和“流”。程序开始执行是,stdin、stdout和stderr这3个流已经处于打开状态。B.1.1文件操作返回目录下列函数用于处理与文件有关的操作。其中,类型size_t是由运算符sizeof生成的无符号整形。FILE*fopen(constchar*filename,constchar*mode)fopen函数打开filename指定的文件,并返回一个与之相关联的流。如果打开失败,则返回NULL。访问模式mode可以为下列合法值之一:“r”打开文本文件用于读“w”创建文本文件用于写,并删除已存在的内容(如果有的话)“a”追加;打开或创建文本文件,并向文件末尾追加内容“r+”打开文本文件用于更新(即读和写)“w+”创建文本文件用于更新,并删除已存在的内容(如果有的话)“a+”追加;打开或创建文本文件用于更新,写文件时追加到文件末尾后三种方式(更新方式)允许对同一个文件进行读和写。在读和写的交叉过程中,必须调用fflush函数或文件定位函数。如果在上述访问模式之后再加上b,如“rb”或“w+b”等,则表示对二进制文件进行操作。文件名filname限定最多为FILENAME_MAX个字符。一次最多可打开FOPEN_MAX个文件。FILE*freopen(constchar*filename,constchar*mode,FILE*stream)freopen函数以mode指定的模式打开filename指定的文件,并将该文件关联到stream指定的流。它返回stream;若出错则返回NULL。freopen函数一般用于改变与stdin、stdout和stderr相关联的文件。C语言参考手册之函数库Ver:1.0Date:2005-8-19LW7807@163.com制作摘录自《C程序设计语言(第二版)》K&R著徐宝文等译版权属原作者和出版社所有-3/15-intfflush(FILE*stream)对输出流来说,fflush函数将已写到缓冲区但尚未写入文件的所有数据写到文件中。对输入流来说,其结果是未定义的。如果在写的过程中发生错误,则返回EOF,否则返回0。fflush(NULL)将清洗所有的输出流。intfclose(FILE*stream)fclose函数将所有未写入的数据写入stream中,丢弃缓冲区中的所有未读输入数据,并释放自动分配的全部缓冲区,最后关闭流。若出错则返回EOF,否则返回0。intremove(constchar*filename)返回目录remove函数删除filename指定的文件,这样,后续试图打开该文件的操作将失败。如果删除操作失败,则返回一个非0值。intrename(constchar*oldname,constchar*newname)rename函数修改文件的名字。如果操作失败,则返回一个非0值。FILE*tmpfile(void)tmpfile函数以模式“w+b”创建一个临时文件,该文件在被关闭或程序正常结束时将被自动删除。如果创建操作成功,该函数返回一个流;如果创建文件失败,则返回NULL。char*tmpnam(chars[L_tmpnam])返回目录tmpnam(NULL)函数创建一个与现有文件名不同的字符串,并返回一个指向一内部静态数组的指针。tmpname(s)函数把创建的字符串保存到数组s中,并将它作为函数值返回。s中至少要有L_tmpnam个字符的空间。tmpnam函数在每次被调用时均生成不同的名字。在程序执行的过程中,最多只能确保生成TMP_MAX个不同的名字。注意,tmpnam函数只能用于创建一个名字,而不能创建一个文件。intsetvbuf(FILE*stream,char*buf,intmode,size_tsize)setvbuf函数控制流stream的缓冲。在执行读、写以及其他任何操作之前必须调用此函数。当mode的值为_IOFBF时,将进行完全缓冲。当mode的值为_IOLBF时,将对文本文件进行行缓冲,当mode的值为_IONBF时,表示不设置缓冲。如果buf的值不是NULL,则setvbuf函数将buf指向的区域作为流的缓冲区,否则将分配一个缓冲区。size决定缓冲区的长度。如果setvbuf函数出错,则返回一个非0值。voidsetbuf(FILE*stream,char*buf)如果buf的值为NULL,则关闭流stream的缓冲;否则setbuf函数等价于(void)setvbuf(stream,buf,_IOFBF,BUFSIZ)。B.1.2格式化输出返回目录printf函数提供格式化输出转换。intfprintf(FILE*stream,constchar*format,…)fprintf函数按照format说明的格式对输出进行转换,并写到stream流中。返回值是实际写入的字符数。若出错则返回一个负值。格式串由两种类型的对象组成:普通字符(将被复制到输出流中)与转换说明(分别决定下一后续参数的转换和打印)。每个转换说明均以字符%开头,以转换字符结束。在%与转换字符之间可以依次包含下列内容:◆标志(可以以任意顺序出现),用于修改转换说明-指定被转换的参数在其字段内左对齐+指定在输出的数前面加上正负号空格如果第一个字符不是正负号,则在其前面加上空格0对于数值转换,当输出长度小于字段宽度时,添加前导0进行填充#指定另一种输出形式。如果为O转换,则第一个数字为零;如果为x或X转换,指定在输出的非0值前加0x或0X;对于e、E、f、g或G转换,指定输