在这篇文章中,我们来详细聊一聊 C 语言标准输入输出头文件 stdio.h 及其常见用法。


1. stdio.h 是什么

stdio.h(Standard Input and Output Header)是 C 标准库中的一个头文件,提供了处理标准输入输出和一些文件操作的函数声明。

它包含的主要功能有:

  1. 标准输入输出stdin, stdout, stderr
  2. 格式化输入输出printf, scanf, fprintf, fscanf 等)
  3. 字符输入输出getchar, putchar, gets, puts 等)
  4. 文件读写fopen, fclose, fread, fwrite, fgets, fputs 等)
  5. 文件定位fseek, ftell, rewind 等)
  6. 错误处理perror, feof, ferror 等)

2. 常见数据类型与宏

stdio.h 中不仅有函数声明,还包含了一些类型定义和宏。

常见类型

  • FILE
    • 用于表示一个文件流(File Stream)的结构体类型,内部存储文件状态、缓冲区等信息。
  • size_t
    • 用于表示对象大小存储容量的无符号整数类型。

常见宏

  • NULL:空指针常量。
  • EOF:文件结束标志(End Of File),通常值为 -1
  • BUFSIZ:缓冲区大小常量。
  • stdin / stdout / stderr:分别表示标准输入流、标准输出流和标准错误流。

3. 常用输入输出函数

3.1 格式化输出函数

#include <stdio.h>int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
  • printf → 向标准输出打印数据。
  • fprintf → 向指定文件流打印数据。
  • sprintf → 将格式化后的数据存入字符串(不安全,可能溢出)。
  • snprintf → 将格式化数据存入字符串,并限制最大长度(推荐替代 sprintf)。

示例:

#include <stdio.h>
int main() {int age = 25;printf("年龄: %d\n", age);return 0;
}

3.2 格式化输入函数

int scanf(const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);
int sscanf(const char *str, const char *format, ...);
  • scanf → 从标准输入读取数据。
  • fscanf → 从指定文件流读取数据。
  • sscanf → 从字符串中读取数据。

示例:

#include <stdio.h>
int main() {int num;printf("请输入一个数字: ");scanf("%d", &num);printf("你输入的数字是: %d\n", num);return 0;
}

⚠️ 注意:scanf 在读取字符串时容易发生缓冲区溢出,推荐用 fgets 等更安全的函数。


3.3 字符输入输出

int getchar(void);           // 从 stdin 读取一个字符
int putchar(int c);          // 输出一个字符到 stdout
char *gets(char *s);         // 从 stdin 读取一行(不安全,已被移除 C11)
char *fgets(char *s, int n, FILE *stream); // 更安全的读取字符串
int puts(const char *s);     // 输出字符串并换行

示例:

#include <stdio.h>
int main() {char name[20];printf("请输入你的名字: ");fgets(name, sizeof(name), stdin);printf("你好, %s", name);return 0;
}

3.4 文件操作函数

FILE *fopen(const char *filename, const char *mode);
int fclose(FILE *stream);
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
char *fgets(char *s, int n, FILE *stream);
int fputs(const char *s, FILE *stream);
int fprintf(FILE *stream, const char *format, ...);

示例:

#include <stdio.h>
int main() {FILE *fp = fopen("test.txt", "w");if (fp == NULL) {perror("文件打开失败");return 1;}fprintf(fp, "Hello, 文件!\n");fclose(fp);return 0;
}

3.5 文件定位函数

int fseek(FILE *stream, long offset, int whence); // 定位文件指针
long ftell(FILE *stream);                         // 获取当前文件指针位置
void rewind(FILE *stream);                        // 重置文件指针到开头

3.6 错误与结束检测

void perror(const char *s); // 打印最近的错误信息
int feof(FILE *stream);     // 检测文件是否到达 EOF
int ferror(FILE *stream);   // 检测文件操作是否发生错误

4. 使用注意事项

  1. 安全性
    • 避免使用 gets(已废弃)
    • 使用 fgets + 手动去除换行符代替
  2. 缓冲区问题
    • stdin 默认行缓冲模式,stdout 默认行缓冲(终端时)/全缓冲(文件时)
  3. 文件操作后记得关闭
    • fclose(fp);
  4. 检查返回值
    • 输入输出函数失败时会返回特殊值,比如 EOF 或负数。

5. 小结

  • stdio.h 是 C 语言 IO 功能的核心头文件。
  • 核心用途:格式化输入输出、字符输入输出、文件操作等。
  • 常用函数:printfscanffgetsfopenfclosefreadfwrite
  • 需要注意安全性和返回值的检查。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919865.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919865.shtml
英文地址,请注明出处:http://en.pswp.cn/news/919865.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Js逆向 拼夕夕anti_content

前言 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;本文章未经…

大模型时代为什么需要向量数据库?

这里写自定义目录标题1. 向量数据库2. 向量嵌入3. 特征和向量4. 相似性测量4.1 欧几里得距离4.2 余弦相似度5. 相似性搜索5.1 K-Means5.2 基于文本嵌入进行意图匹配6. 问答助手7. 意图匹配1. 向量数据库 向量数据库&#xff08;Vector Database&#xff09;&#xff0c;也叫矢…

【Canvas与旗帜】二十角金盘德国旗

【成图】【代码】<!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>多角金盘德国旗 Draft1</title><style type"text/css&qu…

Linux软件编程:总结

一、Linux系统概述&#xff08;一&#xff09;Linux系统概述&#xff08;二&#xff09;Linux系统简介1.常见的Linux系统&#xff1f;2.Linux操作系统是操作系统的核心&#xff0c;也成为内核&#xff0c;内核的主要功能&#xff1f;3.shell是操作系统的外壳&#xff0c;主要作…

【51单片机学习】直流电机驱动(PWM)、AD/DA、红外遥控(外部中断)

一、直流电机驱动&#xff08;PWM&#xff09;1.直流电机介绍步进电机的旋转速度完全由编码的通电时间决定的&#xff0c;可以用于精密控制。 舵机内部是一个直流电机加一个控制器&#xff0c;引出三根线&#xff0c;分别是正负极和编码线&#xff0c;根据输出电平的时间来控制…

ComfyUI Portrait Master肖像大师中文版

本文转载自&#xff1a;ComfyUI Portrait Master肖像大师中文版 - Hello123工具导航 ** 一、产品定位与技术架构 肖像大师中文版是专为 AI 绘画工具设计的提示词生成插件&#xff0c;通过结构化参数控制实现精准人物肖像生成。它基于 ComfyUI 平台开发&#xff0c;提供 193 国…

(Redis)内存淘汰策略

1. 为什么需要内存淘汰策略&#xff1f;Redis 是一个基于内存的高性能数据库&#xff0c;所有数据都存储在内存中。优点&#xff1a;读写速度极快。缺点&#xff1a;内存有限&#xff0c;存满之后如果继续写入&#xff0c;就必须有一套策略来决定“删掉谁&#xff0c;留下谁”。…

Eclipse 里Mybatis的xml的头部报错

需要进行Eclipse 配置 MyBatis 的DTD文件Window -> Preference -> Maven -> 勾选 (download artifact javadoc).

SpringBoot Web快速入门_从零搭建你的第一个Web应用

在 Java 企业级开发领域&#xff0c;SpringBoot 以其 “约定优于配置” 的理念彻底革新了传统 Spring 应用的开发模式。根据 2023 年 JetBrains 开发者调查报告&#xff0c;超 65% 的 Java 开发者将 SpringBoot 选为 Web 开发的首选框架。其优势显著&#xff1a;快速启动&#…

手持 Mid360 + RealSense 相机 + Jetson Orin 一体平台

这篇博客是我们开源的一个项目介绍&#xff0c;包括3D结构件 STP 文件与常见 SLAM 工程在 Arm 设备上编译手册等&#xff0c;将 Livox Mid360、Realsense 相机、Nvidia Jetson Orin、定制电池放在了一个手持设备上&#xff0c;同时这个手持设备预留了底部螺纹孔&#xff0c;当你…

H7-TOOL固件2.31发布,支持250M示波器,支持IAR下载算法加载运行,上位机支持UTF-8编码,增加多款脱机烧录芯片支持

【PC软件】V2.3.1 1. 脱机烧录功能更新: - 添加芯片: - 自动填充文件名、Flash地址、Flash大小、SRAM地址和SRAM大小 - FLM算法文件不支持自动填写文件名&#xff0c;当生成文件后需要手动更新 - 厂商列表栏鼠标右键菜单可复制厂商名 - 修复添加芯片排列次序的问题…

自然语言处理——06 迁移学习(上)

1 fasttext工具介绍 1.1 介绍 fasttext 是 Facebook AI Research&#xff08;FAIR&#xff09;开发的开源 NLP 工具包&#xff0c;专门用来解决文本相关任务&#xff0c;比如情感分析、文本分类&#xff08;判断新闻属于体育/财经等&#xff09;、识别“人名/地名”这类实体&a…

数据库MVCC是什么

问题数据库MVCC是什么我的回答MVCC&#xff0c;全称是"多版本并发控制"(Multi-Version Concurrency Control)&#xff0c;是数据库管理系统中常用的一种并发控制技术。说白了&#xff0c;它就是通过维护数据的多个版本&#xff0c;让读操作不会被写操作阻塞&#xff…

游戏广告投放数据分析项目:拆解投放的“流量密码”

用数据说话&#xff1a;1441条投放记录拆解游戏广告投放的“流量密码”一、数据概况 & 处理思路 先放一张数据全家福&#xff0c;字段 13 个&#xff0c;样本 1441 条&#xff0c;缺失值 0&#xff0c;只做了一件事&#xff1a;把“未知大小”“无”等脏数据清洗掉。 impor…

数据库服务语句应用

文章目录&#x1f31f;数据库语句应用介绍&#x1f340;数据库语句分类介绍DDL&#xff08;Data Definition Language&#xff09;数据定义语言DCL&#xff08;Data Control Language&#xff09;数据控制语言DML&#xff08;Data Manipulation Language&#xff09;数据操作语…

解释器模式与布尔表达式的C++实现

详细探讨一下解释器模式(Interpreter Pattern)以及如何使用它来实现一个简单的布尔表达式求值器。 第一部分:解释器模式详解 1. 模式定义与意图 解释器模式是一种行为设计模式,它给定一个语言,定义其文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中…

ELK 重难点解析以及最佳实践

ELK 重难点解析以及最佳实践 目录 ELK简介核心组件详解使用技巧重难点解析Spring Boot集成具体场景使用最佳实践 ELK简介 什么是ELK ELK是一个开源的日志分析平台&#xff0c;由三个核心组件组成&#xff1a; Elasticsearch: 分布式搜索引擎&#xff0c;用于存储和检索日…

【PyTorch】单对象分割项目

对象分割是在图像中找到目标对象的边界的过程。单目标分割的重点是自动勾勒出图像中一个目标对象的边界。对象边界通常由二进制掩码定义。 通过二进制掩码&#xff0c;可以在图像上覆盖轮廓以勾勒出对象边界。例如以下图片描绘了胎儿的超声图像、胎儿头部的二进制掩码以及覆盖在…

esp dl

放下了好多年 又回到了dl 该忘的也忘的差不多了 其实没啥复杂的 只是不习惯 熟悉而已 好吧 现代的人工智能体 还是存在着很大的问题 眼睛 耳朵 思考 虽然功能是正常的 但距离&#xff02;真正&#xff02;(&#xff09;意思上的独立意识个体 还是差别很大 再等个几十年 看看…

基于django/python的服装销售系统平台/服装购物系统/基于django/python的服装商城

基于django/python的服装销售系统平台/服装购物系统/基于django/python的服装商城