当前位置: 首页 > java >正文

C 语言标准输入输出库:`stdio.h` 的使用详解

1. 概述

在 C 语言中,stdio.h(Standard Input Output Header)是一个标准库头文件,主要用于提供输入与输出功能。几乎所有的 C 程序都会用到它,因为它定义了用于读取、写入、格式化、文件操作等常用函数。

要在程序中使用它,需要在源文件顶部引入:

#include <stdio.h>

引入后,就可以使用 stdio.h 中定义的函数、类型和宏。


2. 常见功能分类

stdio.h 的功能可以大致分为五大类:

  1. 标准输入/输出(终端 I/O)
  2. 格式化输入/输出printf / scanf 等)
  3. 字符与字符串输入/输出
  4. 文件输入/输出
  5. 错误处理宏与常量

3. 标准输入输出流

stdio.h 中定义了三个标准数据流:

名称类型用途
stdinFILE*标准输入流(默认键盘输入)
stdoutFILE*标准输出流(默认控制台输出)
stderrFILE*标准错误流(默认错误输出)

这些可以直接用于 printffprintfscanffscanf 等函数操作。


4. 常用函数详解

4.1 格式化输出函数

printf - 输出格式化到标准输出
#include <stdio.h>int main() {int a = 10;float b = 3.14;printf("a = %d, b = %.2f\n", a, b);return 0;
}
  • %d:整型
  • %f:浮点型
  • %s:字符串
  • %c:字符
  • %.2f:保留两位小数
fprintf - 输出到文件流
fprintf(stdout, "Hello %s\n", "World");
fprintf(stderr, "Error: invalid input\n");
sprintf / snprintf - 输出到字符串
char buf[50];
sprintf(buf, "Sum = %d", 5 + 3);
  • snprintf 带长度限制,安全性更好。

4.2 格式化输入函数

scanf - 从标准输入读取格式化数据
int x;
scanf("%d", &x);
fscanf - 从文件流读取格式化数据
FILE *fp = fopen("data.txt", "r");
int n;
fscanf(fp, "%d", &n);
sscanf - 从字符串读取数据
char str[] = "100 3.14";
int a; float f;
sscanf(str, "%d %f", &a, &f);

4.3 字符输入输出函数

getchar / putchar
char c = getchar(); // 从 stdin 读取一个字符
putchar(c);         // 输出到 stdout
gets(已废弃)/ fgets
char buf[100];
fgets(buf, sizeof(buf), stdin); // 安全读取字符串
puts
puts("Hello World"); // 自动换行

4.4 文件输入输出函数

使用文件 I/O 需要理解 FILE 结构体,FILE* 是指向文件对象的指针。

打开和关闭文件
FILE *fp = fopen("test.txt", "w"); // w: 写模式
if (!fp) {perror("File open error");return 1;
}
fclose(fp);

常见文件打开模式:

模式说明
"r"读模式(文件必须存在)
"w"写模式(清空原文件)
"a"追加模式
"r+"读写模式
"w+"清空写读模式
"a+"追加读写模式
二进制模式
  • "rb", "wb", "ab"
文件读取函数
char buf[100];
fgets(buf, sizeof(buf), fp);    // 读取一行
fread(buf, 1, 50, fp);          // 按字节读取
文件写入函数
fprintf(fp, "Hello File\n");
fwrite(buf, 1, strlen(buf), fp);
文件定位
fseek(fp, 0, SEEK_SET); // 移动到文件开头
ftell(fp);              // 获取当前偏移量
rewind(fp);             // 回到文件开头

4.5 错误处理

perror / feof / ferror
FILE *fp = fopen("nofile.txt", "r");
if (!fp) {perror("Open file error"); // 输出描述性错误
}

5. 常用宏与类型

stdio.h 中定义了:

  • EOF:通常是 -1,表示文件结束或输入错误
  • NULL:空指针常量
  • size_t:无符号整数类型(用于数组、文件大小)

6. 注意事项与最佳实践

  1. 避免使用不安全函数
    • 不要使用 gets,改用 fgets
    • sprintf 改用 snprintf
  2. 检查文件操作返回值
    • 确保 fopen 成功后再使用文件
  3. 使用缓冲机制
    • setbufsetvbuf 可以设置自定义缓冲,优化性能
  4. 正确关闭文件
    • 使用 fclose 释放资源,防止内存泄漏
  5. 格式化时谨慎类型匹配
    • printf / scanf 格式化符应与变量类型严格匹配

7. 小结

stdio.h 是 C 语言中最基础、最常用的库之一,掌握它不仅能提高代码的输入输出效率,还能打下坚实的文件操作基础。在编写程序时,熟练使用 printfscanffgetsfprintf 等函数,以及安全地进行文件读写,是每个 C 程序员的必备技能。

http://www.xdnf.cn/news/19953.html

相关文章:

  • Loot模板系统
  • AutoGPT 原理与实践:从AI助理到“自主任务完成者” (人工智能入门系列)
  • Linux 入门到精通,真的不用背命令!零基础小白靠「场景化学习法」,3 个月拿下运维 offer,第二十五天
  • go速通(1/10)
  • K8s基于节点软亲和的高 CPU Pod 扩容与优先调度方案
  • 【目标检测】特征理解与标注技巧
  • 详尽 | Deeplabv3+结构理解
  • 虚拟机详细图文教程系列14、Linux虚拟机Centos8系统下载安装Python-Pycharm
  • Crush AI:终端里的新晋编码神器,快到飞起
  • Shapely
  • Python测试框架Pytest的参数化
  • 【python】运算符及语句
  • LeetCode 1023.驼峰式匹配
  • 3-7〔OSCP ◈ 研记〕❘ WEB应用攻击▸REST API概述
  • MTK Linux DRM分析(三十三)- MTK mtk_mipi_tx.c
  • 【10月优质EI会议合集|高录用】能源、机电一体化、材料、计算机、环境、电力、可再生资源、遥感、通讯、智慧交通...
  • 系统编程day03-进程
  • ​​​​​​​2025企业级GEO优化白皮书:技术生态与商业落地双轮驱动下的选择指南
  • 【2025ICCV】基于 ​CL-Splats​ 的3D高斯溅射模型
  • 苍穹外卖项目笔记day04--Redis入门
  • 如何区分 Context Engineering 与 Prompt Engineering
  • 【2025ICCV-持续学习方向】一种用于提示持续学习(Prompt-based Continual Learning, PCL)的新方法
  • C 内存对齐踩坑记录
  • 如何批量在PDF文档最后一页盖章?
  • 从源码入手,详解Linux进程
  • 并发编程指南 同步操作与强制排序
  • 理解Go与Python中的闭包(Closure)
  • 充电枪结构-常规特征设计
  • 代码随想录刷题Day48
  • PostgreSQL 索引使用分析2