C标准库函数-stdio

概述
支持标准C实现的系统,同时会提供一套标准库.
#include<头文件>即可使用库函数,以及一些类型,宏定义.
输入与输出:stdio.h
字符类别测试:ctype.h
字符串函数:string.h
数学函数:math.h
实用函数:stdlib.h
诊断:assert.h
可变参数表:stdarg.h
非局部跳转:setjmp.h
信号:signal.h
日期与时间函数:time.h
与具体实现相关的限制:limits.h/float.h


stdio.h
-文件无形,而程序有形.
流,是磁盘或其他设备关联数据的源或目的地.
文件是一种流,终端输出也是一种流,流是数据的容器.
打开流,将返回一个指向FILE类型对象的指针,FILE*记录了控制该流的信息.
程序在开始执行时,stdin(标准输入),stdout(标准输出),stderr(标准错误),
三个流已经处于打开状态,其类型为FILE*.
->文件操作
-------------------------------------------------------------------------
原型:FILE* fopen(const char* filename,const char* mode);
功能:打开一个文件,供之后文件操作.
返回:打开成功返回文件控制的流,失败返回NULL.
参数:
filename:文件路径和文件名.
mode:取值为"r"(只读),"w"(打开清空/创建并只写),
"a"(打开追加/创建并只写).
可以增加'+'代表原基础上可读可写,'b'以二进制方式(无用).
如:
"a+b","w+","r+".
备注:filename限定最多为FILENAME_MAX个字符,
一次最多打开FOPEN_MAX个文件.
-------------------------------------------------------------------------
原型:FILE* freopen(const char* filename,const char* mode,FILE* stream);
功能:打开文件,关联到stream(stdout等).
备注:操作stream,filename将自动被操作,可以用以生成日志.
-------------------------------------------------------------------------
原型:int fflush(FILE* stream);
功能:将输出流缓冲区数据,写入到文件中.
返回:成功返回0,失败返回EOF(-1).
参数:文件流.
备注:参数传递NULL,则写到输出流中.
-------------------------------------------------------------------------
原型:int remove(const char* filename);
功能:删除指定的文件.
返回:成功返回0,失败返回非0.
参数:文件路径和文件名.
备注:无
-------------------------------------------------------------------------
原型:int rename(const char* oldname,const char* newname);
修改文件名字,如果失败返回一个非0值.
-------------------------------------------------------------------------
原型:FILE* tmpfile(void);
创建一个"wb+"的临时文件,文件关闭或程序结束将被自动删除.
创建失败则返回NULL.
-------------------------------------------------------------------------
char* tmpnam(char s[L_tmpnam);
自动创建一个可用的,与现有文件名不同的字符串.
保存在数组s中,并返回,这样可以防止主动命名的重复.
这个函数并不创建文件,最多确保生成TMP_MAX个名字.
-------------------------------------------------------------------------
原型:int setvbuf(FILE* stream,char* buf,int mode,size_t size);
功能:设置stream的缓冲区.
返回:成功返回0,失败返回非0.
参数:
stream:目标流.
buf:缓冲区,如果设置NULL,则系统自动分配.
mode:
_IOFBF:使用缓冲区.
_IOLBF:对文本文件进行缓冲.
_IONBF:不设置缓冲.
size:缓冲区的长度.
备注:stdin,stdout,stderr同样有效.
-------------------------------------------------------------------------
原型:int setbuf(FILE* stream,char* buf);
如果buf为NULL,则关闭流stream的缓冲,否则setbuf等价于:
void setvbuf(stream,buf,_IOFBF,BUFSIZ);
->格式化输出
输入输出相对于程序而言.
-------------------------------------------------------------------------
原型:int fprintf(FILE* stream,const char* format,...);
功能:输出格式转换的format字符串到stream流中.
返回:成功返回输出的字符数,失败返回一个负值.
参数:
stream:目标流.
format:由普通字符,%字符,转换字符构成的字符串.
...:可变长参数,对应占位符.
备注:占位符说明:
-(左对齐),+(数字前显示+-号),空格(有正负号则使用,无则填充空格),
0(前导0填充数字宽度),#o,#0x,#0X,#e,#E,#f,#g,#G制定输出形式.
数值 :指定输出数字所占的位宽.
.数值 :对于字符串,指定打印字符串字符个数
对于e,E,f转换,指定小数点后的数字位数.
对于g/G转换,指定有效数字位数.
对于整数,指定打印的数字位数.(不足填0)
长度修饰:h(short,unsigned short),l(long,unsigned long)
L(long double).
d,i :int,10进制
此外还有:o,x,X,u,c,s,f,e,E,g,G,p,%.
-------------------------------------------------------------------------
原型:int printf(const char* format,...);
相当于:fprintf(stdout,...);
-------------------------------------------------------------------------
原型:int sprintf(char* s,const char* format,...);
以缓冲区s为流对象,会以'\0'结尾,返回的字符数不包括'\0'.
-------------------------------------------------------------------------
原型:int vprintf(const char* format,va_list arg);
原型:int vfprintf(FILE* stream,const char* format,va_list arg);
原型:int vsprintf(char* s,const char* format,va_list arg);
同去掉v后的函数,只是将可变长参数以arg代替,详见<stdarg.h>
->格式化输入
-------------------------------------------------------------------------
原型:int fscanf(FILE* stream,const char* format,...);
功能:从流stream中读入格式串format,并赋值给后续参数(指针).
返回:返回实际赋值项的数目,错误或达到文件末尾则返回EOF.
参数:
stream:目标流.
format:格式串.
...:可变长参数.
备注:format可以包含以下内容.
空格/制表符:无作用.
普通字符:与输入流中的下一个非空白字符匹配.
转换说明:由%以及 赋值屏蔽字符*(可选),指定最大字段宽度数(可选),
指定目标字段宽度(l,h,L)(可选),以及一个转换字符组成.
原型:int scanf(FILE* stream,const char* format,...);
原型:int sscanf(const char* s,const char* format,...);
同输出.
示例:
scanf("%*d,a%dc",&m,&n);
键盘输入:
a15c
于是n取15.
若匹配错误,则再无法输入,除非清空输入缓冲区.
scanf("%*[^\n]");
scanf("%*c");  
->字符输入/输出
-------------------------------------------------------------------------
原型:int fgetc(FILE* stream);
功能:读取stream流的下一个字符.
返回:返回读取的字符,如果到达文件末尾或发生错误,则返回EOF.
参数:stream,目标流.
备注:无
-------------------------------------------------------------------------
原型:char* fgets(char* s,int n,FILE* stream);
功能:最多将n-1个流中的字符,读入s.
返回:正确返回s,错误返回NULL.
参数:
s:缓冲区.
n:s中总字符的最大数量,n-1个字符+'\0'.
stream:目标流.
备注:s结尾会是'\0',如果倒数第二个字符不是'\n',
说明部分数据留在了输入缓冲区,需要清空.
如果输入缓冲区没有数据,清空操作会导致错误,所以需要判断.
-------------------------------------------------------------------------
原型:int fputc(int c,FILE* stream);
把字符c输出到stream中,返回写入的字符,出错返回EOF.
-------------------------------------------------------------------------
原型:int fputs(const char* s,FILE* stream);
把字符串s输出到流stream,返回一个非负值,出错返回EOF.
-------------------------------------------------------------------------
原型:int getc(FILE* stream);
等价于fgetc.
-------------------------------------------------------------------------
原型:int getchar(void);
等价于:getc(stdin);
-------------------------------------------------------------------------
原型:char* gets(char* s);
把下一个输入行读入到数组s中,末尾换行符替换为'\0'.
正确返回s,错误返回NULL.
次函数不安全.
-------------------------------------------------------------------------
原型:int putc(int c,FILE* stream);
等价于fputc.
-------------------------------------------------------------------------
原型:int putchar(int c);
等价于:putc(c,stdout);
-------------------------------------------------------------------------
原型:int puts(const char* s);
把s和一个换行符输出到stdout中,如果发生错误,返回EOF,否则返回非负值.
-------------------------------------------------------------------------
原型:int ungetc(int c,FILE* stream);
向stream写入字符c,下次读操作,将返回c.
每个流仅能写回一个字符.
->直接输入/输出
-------------------------------------------------------------------------
原型:size_t fread(void* ptr,size_t size,size_t nobj,FILE* stream);
从ptr指向的数组中,读取nobj个长度为size的对象,并输出到stream.
它返回读取的对象数目,此返回值可能小于nobj,通过函数feof,ferror获得执行状态.
-------------------------------------------------------------------------
原型:size_t fwrite(const void* ptr,size_t size,size_t nobj,FILE* stream);
写到流中,用法与fread相似.
->文件定位
-------------------------------------------------------------------------
原型:int fseek(FILE* stream,long offset,int origin);
设置流stream的文件位置,后续读写操作将从新位置开始.
从origin开始的offset个字符处.
origin:
SEEK_SET:文件开始处.
SEEK_CUR:当前位置.
SEEK_END:文件结束处.
对于文本流,offset必须是ftell返回的值(此时SEEK_SET),或者是0.
-------------------------------------------------------------------------
原型:long ftell(FILE* stream);
返回stream流的当前文件位置,出错时返回-1L.
-------------------------------------------------------------------------
原型:void rewind(FILE* stream);
等价于:
fseek(fp,0L,SEEK_SET);
clearerr(fp);
将文件位置定位到起始.
-------------------------------------------------------------------------
原型:void fgetpos(FILE* stream,fpos_t* ptr);
把stream流当前位置记录在*ptr中,供随后的fsetpos函数使用.
-------------------------------------------------------------------------
原型:int fsetpos(FILE* stream,const fpos_t* ptr);
将流的当前位置设置为*ptr所在位置,出错返回一个非0值.
->错误处理
-------------------------------------------------------------------------
原型:void clearerr(FILE* stream);
清除与流stream相关的文件结束符,和错误指示符.
-------------------------------------------------------------------------
原型:int feof(FILE* stream);
如果设置了stream的文件结束指示符,feof函数返回非0.
-------------------------------------------------------------------------
原型:int ferror(FILE* stream);
如果设置了stream的错误指示符,feof函数返回非0.
-------------------------------------------------------------------------
原型:void perror(const char* s);
打印错误信息,类似于执行了:
fprintf(stderr,"%s":%s\n",s,"error message");

猜你喜欢

转载自blog.csdn.net/csm1972385274/article/details/76726683