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 保证可读性

相关推荐
Brilliantwxx2 分钟前
【Linux】 软件包管理器(yum)+ Vim使用
linux·运维·服务器·开发语言·编辑器·vim
雪的季节5 分钟前
Python 线程同步与异步编程 全解析
java·开发语言
520拼好饭被践踏24 分钟前
JAVA+Agent学习day22
java·开发语言·后端·学习
笨蛋不要掉眼泪35 分钟前
Java虚拟机:堆的参数配置
java·开发语言·jvm
冰暮流星41 分钟前
javascript之date对象
开发语言·javascript·ecmascript
小肝一下1 小时前
7. 库制作与原理
linux·c语言·操作系统·bash·shell·动静态库
春生野草1 小时前
C基础--八大排序(个人笔记)
c语言·笔记·排序算法
Wang's Blog1 小时前
Go-Zero项目开发17: IM私聊功能实现与消息存储设计
开发语言·后端·golang
Ulyanov1 小时前
Python雷达电子对抗仿真引擎(一):打破单体瓶颈,构建微服务与ECS架构的顶层设计
开发语言·python·微服务·云原生·架构·雷达电子对抗
IT方大同1 小时前
C语言分支与循环语句
c语言·开发语言·算法