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

相关推荐
楼田莉子1 小时前
Linux学习:基础IO相关学习
linux·开发语言·c++·后端·学习
MM_MS1 小时前
MYSQl数据库详细知识点和在Navicat中的具体操作
开发语言·数据库·sql·mysql·oracle
GeekyGuru1 小时前
C#:游戏开发的高效利器
开发语言·c#
涔溪1 小时前
深入了解 Node.js 性能诊断工具 Clinic.js 的底层工作原理
开发语言·javascript·node.js
JienDa1 小时前
JienDa聊PHP:PHP 8革命性特性深度实战报告:枚举、联合类型与Attributes的工程化实践
android·开发语言·php
.小小陈.1 小时前
C++初阶5:string类使用攻略
开发语言·c++·学习·算法
JSON_L1 小时前
PHP安装GMP扩展
开发语言·php
!停1 小时前
深入理解指针(1)
c语言
向葭奔赴♡1 小时前
Android AlertDialog实战:5种常用对话框实现
android·java·开发语言·贪心算法·gitee