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

相关推荐
派大鑫wink11 小时前
【Day15】集合框架(三):Map 接口(HashMap 底层原理 + 实战)
java·开发语言
派大鑫wink11 小时前
【Day14】集合框架(二):Set 接口(HashSet、TreeSet)去重与排序
java·开发语言
sort浅忆11 小时前
deeptest执行接口脚本,添加python脚本断言
开发语言·python
趣知岛11 小时前
JavaScript性能优化实战大纲
开发语言·javascript·性能优化
im_AMBER11 小时前
weather-app开发手记 04 AntDesign组件库使用解析 | 项目设计困惑
开发语言·前端·javascript·笔记·学习·react.js
lkbhua莱克瓦2412 小时前
MySQL介绍
java·开发语言·数据库·笔记·mysql
kylezhao201912 小时前
如何在 C# 项目中使用 NLog 进行日志记录
开发语言·c#
好度12 小时前
配置java标准环境?(详细教程)
java·开发语言
笨笨马甲12 小时前
Qt TCP连接硬件设备
开发语言·qt·tcp/ip
建群新人小猿12 小时前
陀螺匠企业助手-我的日程
android·大数据·运维·开发语言·容器