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

相关推荐
神仙别闹6 小时前
基于 C++ 实现(控制台)学生成绩管理系统
开发语言·c++
伞伞悦读7 小时前
【第36期】Python 目录与路径详解:pathlib、文件遍历、创建、复制、移动和删除风险
开发语言·python
free-elcmacom9 小时前
C语言字符指针与字符串字面量——从一道“剑指 Offer”笔试题说起
c语言·visual studio
2601_966949659 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
m0_7345717610 小时前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g
RAN114267600811 小时前
1.3第一个程序的介绍
开发语言·qt
blue_ice .12 小时前
Verilog DDS 数字信号发生器:DAC 输出模拟波形与 ADC 回采观测
开发语言·单片机·嵌入式硬件·fpga开发
远翔调光芯片^1382879887212 小时前
ECP5702能芯科技PD取电芯片在市场上的优势有哪些?
开发语言·人工智能·单片机·嵌入式硬件·智能家居
泡海椒13 小时前
规则引擎对比:JQuick-Java vs Drools 轻量场景选型对比
java·开发语言
泡泡鱼(敲代码中)13 小时前
Python 容器类型学习笔记:列表、元组、字典、集合
开发语言·笔记·python·pycharm