写操作大概是三个步骤:
1.打开(定义)文件fopen()函数
2.进行写操作
fputc()一次写一个,返回写出的字符
fputs()一次写一个字符串,写出成功返回非负数,一般忽略返回值
fwrite(),一次写多个,返回写出的个数
3.关闭文件------fclose()函数
在 C 语言中,文件写操作常用的三个函数是:
fputc():写入单个字符fputs():写入字符串(不带自动换行)fwrite():以二进制方式写入任意类型的数据块
下面分别介绍它们的函数原型、用法、注意事项和示例。
1. fputc() ------ 写入单个字符
函数原型:
int fputc(int ch, FILE *stream);
- 参数 :
ch:要写入的字符(虽然类型是int,但实际只使用低 8 位)stream:指向FILE的指针(已打开的文件)
- 返回值 :
- 成功:返回写入的字符(作为
unsigned char转为int) - 失败:返回
EOF
- 成功:返回写入的字符(作为
特点:
- 每次只写一个字符
- 常用于逐字符写入或构建简单文本
示例:
FILE *fp = fopen("output.txt", "w");
if (fp) {
fputc('H', fp);
fputc('i', fp);
fputc('\n', fp);
fclose(fp);
}
// 文件内容:Hi\n
2. fputs() ------ 写入字符串
函数原型:
int fputs(const char *str, FILE *stream);
- 参数 :
str:要写入的字符串(以\0结尾)stream:文件指针
- 返回值 :
- 成功:非负值(具体值未指定)
- 失败:
EOF
注意:
- 不会自动添加换行符 (与
puts()不同) - 不会写入字符串末尾的
\0
示例:
FILE *fp = fopen("output.txt", "w");
if (fp) {
fputs("Hello, ", fp);
fputs("World!\n", fp);
fclose(fp);
}
// 文件内容:Hello, World!\n
3. fwrite() ------ 二进制写入数据块
函数原型:
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
- 参数 :
ptr:指向要写入数据的起始地址size:每个元素的字节数nmemb:元素个数stream:文件指针
- 返回值 :
- 成功:返回实际写入的元素个数(不是字节数!)
- 若小于
nmemb,可能出错或磁盘满
特点:
- 用于二进制模式 写入(建议用
"wb"打开文件) - 可写入结构体、数组、整数等任意类型
- 不进行格式转换(原样写入内存内容)
示例 1:写入字符串(二进制方式)
char str[] = "Binary write";
FILE *fp = fopen("data.bin", "wb");
if (fp) {
fwrite(str, sizeof(char), strlen(str), fp);
fclose(fp);
}
示例 2:写入结构体
typedef struct {
int id;
double score;
} Student;
Student s = {1001, 95.5};
FILE *fp = fopen("student.dat", "wb");
if (fp) {
fwrite(&s, sizeof(Student), 1, fp);
fclose(fp);
}
对比总结
| 函数 | 用途 | 是否自动加 \n |
是否写 \0 |
推荐模式 |
|---|---|---|---|---|
fputc |
写单个字符 | 否 | 不适用 | 文本/二进制 |
fputs |
写字符串 | 否 | 否 | 文本("w") |
fwrite |
写任意数据块 | 否 | 否(原样写) | 二进制("wb") |
注意事项
- 文件打开模式 :
- 文本写入:
"w"(覆盖)、"a"(追加) - 二进制写入:
"wb"、"ab"
- 文本写入:
- 检查返回值:所有写操作都应检查是否成功
- 及时关闭文件 :使用
fclose()释放资源并确保缓冲区刷新 - 跨平台兼容性 :
fwrite写入的二进制文件在不同系统(如大小端、int大小不同)可能不兼容- 文本文件建议用
fputc/fputs保证可读性