551次
1、规范规则了规范函数库中的函数接口独霸,有助于提高挨次的可移植性;
2、标准库函数在errno中保管错误代码以后将这个信息通报给用户,提示垄断败北的原由;
注:只要当一个库函数失利时,errno才会被设置装备摆设,当函数成功履行时,errno的值不会被批改,因而我们不能经由过程测试errno的值来果断可否有错误发生发火,运用perror是一个很好的办法;
3、perror函数与exit函数
perror函数原型:
void perror(char const *message);exit函数原型:
void exit(int status);注:预约义符号EXIT_SUCCESS与EXIT_FAILURE离别默示步骤的终止的胜利照旧打败仗;
4、标准I/O函数库的两个弊端:
(1)在某台特定类型的机器上实现,并不有对其它存在差异本性的机械做适量的思虑(偶尔是由于架构的不合,譬如x86与ARM);
(2)由于第一个错误谬误的影响,屡屡会批改此中的函数完成,从而招致可移植性低;
5、筹划调试步伐时,某些函数挪用的输入终究被写入缓冲区中,但是并不马上展示在屏幕上,而紧要查看终于的状况:
在每个调试的printf函数以后即时挪用fflush函数;
printf("hello"); ffulsh(stdout);6、一个步伐同时最多能掀开若干好多文件——可以查看FOPEN_MAX认识,它的值至多为8;
最长文件名——可以查看FILENAME_MAX;
7、I/O函数以三种底子的内容处置惩罚数据:单个字符、文本行与二进制数据;
8、fopen函数原型:
FILE *fopen(char const *name, char const *mode);name是巴望打开文件或设备的名字,mode参数默示流是用于只读、只写、还是读写以及是文本流照常二进制流;
注:应该不停查看fopen的前往值,如果函数失败会前去一个NULL值;不然NULL指针会传给后续的函数,它们将对其发展间接会面会导致战败;
9、fclose函数原型:
int fclose(FILE * f);fclose函数在文件关闭以前刷新缓冲区,假设实行胜利,fclose前去零值,不然前去EOF(这也是为何返回int值的缘故原由,在之前有叙说);
10、关于错误搜查:
在思忖错误搜检的时刻,思考两个标题:(1)要是垄断告捷该当实验甚么?(2)假设垄断失败理当实验什么?
假设两个题目标谜底是分歧的,应该进行错误查抄,否则跳谬误误查看才是合理的;
11、字符I/O:
int fgetc(FILE *stream); int getc(FILE *stream); int getchar(void); int fputc(FILE *stream); int putc(FILE *stream); int putchar(void);注:它们凡是返回一个int值而不是char值,是为了许可报告文件的劈脸EOF;
fgetc和fputc凡是真正的函数,而getc、putc、getchar、putchar但凡经由#define指令界说的宏;
12、未花式化的行I/O
char *fgets(char *buffer, int buffer_size, FILE *stream);char *gets(char *buffer);fgets是从指定的流读取字符串的,当读取到换行符可能缓冲区存储的字符数抵达buffer_size-1时,中止读取并将一个NUL字节增进到数据的最先,使之成为一个字符串,fgets读取到达了文件的初阶就前往一个NULL值,不然前往它的第一个参数(fgets无奈把字符串读入到一个长度小于两个字符的缓冲区,由于个中一个用于NUL字节);
gets没法果断缓冲区的长度,因此应当少用gets,当gets读取一行输入时,并不在缓冲区中存储收尾的换行符;
int fputs(char const *buffer, FILE *stream);int puts(char const *buffer);fputs若是写入错误时,前往EOF,不然前往一个非负值;运用fputs时,要是缓冲区中不席卷一个换行符,就不会写入换行符,若是征求多个换行符,全数的换行符都市被写入;
当puts写入一个字符串时,它在字符串写入以后向输出再增多一个换行符,而fputs则不会;
13、scanf家属
int fscanf(FILE *stream, char const *format, ...);int scanf(char const *format, ....);int sscanf(char const *string, char const *format, ....);fscanf输入源是作为参数给出的流,scanf从规范输入读取,sscanf从第一个参数所给出的字符串中读取字符;
format字符串参数可能搜罗如下内容:
(1)空缺字符——处置中会被疏忽
(2)格局代码——疏解输入的字符
(3)其他字符——当任何此外字符出现在花式字符串中,下一个输入字符必须跟它成婚,如果结婚,该输入字符就被扔弃,否则函数就不再读取直接返回;
格局代码样式:
以一个%开头,(1)一个可选的星号(2)一个可选的宽度(3)一个可选的制约符(4)花式码
星号:使转换后的值被扬弃而不是存储(用于跳过不需要的输入字符);
宽度:用于限制将被读取用于转换的输入字符的个数,假定未给出宽度,函数就延续读入字符直到遇见输入中的下一个空缺字符;
限度符:用于批改有些格局码的定义,目标是指定参数的长度;
样式码:用于指定输入字符若何被评释;
限定符:
名目码:
14、printf眷属
int fprintf(FILE *stream, char const *format, ...);int printf(char const *format, ...);int sprintf(char *buffer, char const *format, ...);printf将毕竟输入到标准输出,fprintf将结果输出到任何流,sprintf将终归作为一个NUL最后的字符串存储到特定的buffer中而不是写入流中;它们的返回值但凡现实打印或存储的字符数;
printf的format参数与scanf同样
format中的格局代码:以一个%一开始,(1)一个或多个标志字符(2)一个可选的最小字段宽度(3)一个可选的精度(4)一个可选的批改符(5)转换类型
符号字符:
批改符:
参数类型:
该部份最好查阅《C和指针》的原文内容;