东阳的学习笔记
1. 输入函数
一但打开了流,则可在3种不同类型的非格式化I/O中进行选择,对其进行读、写操作。
- 每次一个字节的I/O,一次读或者写一个字符,如果流是带缓冲的,则标准I/O流处理所有缓冲
- 每次一行的I/O。如果想要一次读或者写一行,则使用 fgets 和 fputs 。没行都以一个换行符终止。当调用 fgets 时,应说明能处理的最大行数
- 直接I/O。fread和fwrite函数支持这种类型的I/O。常用于从二进制文件中每次读或者写一个结构
在大多数实现中,为每个流在 FILE 对象中维护了两个标志:
- 出错标志
- 文件结束标志
调用 clearerr可以清除这两个标志
从流中读取数据后,可以调用 ungetc 将字符再压送回流中
2. 输出函数:
int putc(int c, FILE *fp);
int fputs(int c, FILE *fp);
int putchar(int c);
与输入函数一样,putchar© 等同于 putc(c, stdout),putc 可被实现为宏,而 fputc 不能实现为宏
每次一行 I/O
char *fgets(char *restrict buf, int n, FILE *restrict fp);
char *gets(char *buf);
fgets必须,必须指定缓冲区的长度n,此函数一直读到下一个换行符为止,单是不超过 n -1 个字符。
gets() 是一个不推荐使用的函数
。其问题在于调用着调用 gets 时不能指定缓冲区的长度,这样就有可能造成缓冲区溢出,写到缓冲区之后的储存空间里,从而产生不可预料的后果。
int fputs(const char *restrict str, FILE *restrict fp);
int puts(const char *str);
函数 fputs() 将一个以 null 字节终止的字符串写道指定的流,尾端的终止符 null 不写出。通常,在 null 字节之前是一个换行符,但并不要求总是如此。
puts() 将一个以 null 结尾的字符串写到标准输出,终止符不写出,但是,puts随后又将一个换行符写到标准输出。
puts() 并不像gets()一样不安全。但是我们还是应该避免使用它,以免需要记住它是否在最后添加了一个换行符。