文章目录
1,fgetc/fputc,fgets/fputs,fread/fwrite比较
|标准IO|效率|文本文件|二进制文件|
|:----------|:---:|:---:|:---:|
|fgetc/fputc|低|可以|可以|
|fgets/fputs|高|可以|不可以|
|fread/fwrite|高|可以|可以|
标准IO | 效率 | 文本文件 | 二进制文件 |
---|---|---|---|
fgetc/fputc | 低 | 可以 | 可以 |
fgets/fputs | 高 | 可以 | 不可以 |
fread/fwrite | 高 | 可以 | 可以 |
<table>
<thead>
<tr>
<th width=25% rowspan=2>标准I/O</th>
<th rowspan=2>效率</th>
<th colspan=2>读写文件</th>
</tr>
<tr>
<th>文本文件</th>
<th>二进制文件</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>fgetc/fputc</code></td>
<td>低 </td>
<td>可以</td>
<td>可以</td>
</tr>
<tr>
<td>fgets/fputs</td>
<td>低</td>
<td>可以</td>
<td><I>不可以</I></td>
</tr>
<tr>
<td>fread/fwrite</td>
<td>高</td>
<td>可以</td>
<td>可以</td>
</tr>
</tbody>
</table>
标准I/O | 效率 | 读写文件 | |
---|---|---|---|
文本文件 | 二进制文件 | ||
fgetc/fputc | 低 | 可以 | 可以 |
fgets/fputs | 低 | 可以 | 不可以 |
fread/fwrite | 高 | 可以 | 可以 |
2,按字符输入fgetc(),getc(),getchar()
下列函数用来输入一个字符:
#include <stdio.h>
int fgetc(FILE *stream);
int getc(FILE *stream);
int getchar(void);
- 成功时返回读取的字符; 若到文件末尾或出错时返回EOF
- getchar()等同于fgetc(stdin)
3,按字符输出fputc(),putc(),putchar()
下列函数用来输出一个字符:
#include <stdio.h>
int fputc(int c, FILE *stream);
int putc(int c, FILE *stream);
int putchar(int c);
- 成功时返回写入的字符; 出错时返回EOF
- putchar©等同于fputc(c, stdout)
4,按行输入gets(),fgets()
下列函数用来输入一行:
#include <stdio.h>
char *gets(char *s);
char *fgets(char *s, int size, FILE *stream);
- 成功时返回s, 到文件末尾或出错时返回NULL
- gets不推荐使用, 容易造成缓冲区溢出
- 遇到’\n’或已输入size-1个字符时返回, 总是包含’\0’
5,按行输出puts(),fputs()
下列函数用来输出字符串:
#include <stdio.h>
int puts(const char *s);
int fputs(const char *s, FILE *stream);
- 成功时返回输出的字符个数; 出错时返回EOF
- puts将缓冲区s中的字符串输出到stdout, 并追加’\n’
- fputs将缓冲区s中的字符串输出到stream
6,按对象读写fread(),fwrite()
下列函数用来从流中读写若干个对象:
#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t n, FILE *fp);
size_t fwrite(const void *ptr, size_t size, size_t n, FILE *fp);
- 成功返回读写的对象个数; 出错时返回EOF
- 既可以读写文本文件, 也可以读写数据文件
- 效率高
7,格式化输出printf(),fprintf(),sprintf()
#include <stdio.h>
int printf(const char *fmt, …);
int fprintf(FILE *stream, const char *fmt, …);
int sprintf(char *s, const char *fmt, …);
- 成功时返回输出的字符个数; 出错时返回EOF
- 使用起来很方便, 强烈推荐!