3.C语言文件操作:写操作fputc(),fputs(),fwrite()

写操作大概是三个步骤:

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")

注意事项

  1. 文件打开模式
    • 文本写入:"w"(覆盖)、"a"(追加)
    • 二进制写入:"wb""ab"
  2. 检查返回值:所有写操作都应检查是否成功
  3. 及时关闭文件 :使用 fclose() 释放资源并确保缓冲区刷新
  4. 跨平台兼容性
    • fwrite 写入的二进制文件在不同系统(如大小端、int 大小不同)可能不兼容
    • 文本文件建议用 fputc/fputs 保证可读性

相关推荐
m0_736919104 小时前
C++代码风格检查工具
开发语言·c++·算法
2501_944934734 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
黎雁·泠崖5 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
2301_763472466 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
TechWJ6 小时前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto
lly2024066 小时前
C++ 文件和流
开发语言
m0_706653237 小时前
分布式系统安全通信
开发语言·c++·算法
寻寻觅觅☆7 小时前
东华OJ-基础题-104-A == B ?(C++)
开发语言·c++
lightqjx7 小时前
【C++】unordered系列的封装
开发语言·c++·stl·unordered系列
zh_xuan8 小时前
kotlin lazy委托异常时执行流程
开发语言·kotlin