【C语言】标准库常用格式化输入输出函数:sprintf、sscanf

深入理解 sscanf 和 sprintf:C/C++ 中的强大字符串处理函数 sscanfsprintfsscanf和sprintf是 C/C++ 中经典的字符串处理函数,提供了强大的格式化输入和输出功能。尽管它们不具备现代 C++ 中的类型安全和边界检查等优势,但在处理固定格式的字符串时,依然有其不可替代的灵活性和高效性。在现代 C++ 编程中,除非需要非常复杂的格式处理或需要与旧代码兼容,否则更推荐使用 C++11 引入的标准库函数,如std::stod和,来替代sscanf和sprintf。这样可以提高代码的可读性和安全性。 阅读详情

C 标准库中常用的 格式化输入输出函数 的说明:


一、格式化输出函数

1. printf

int printf(const char *format, ...);
  • 功能:将格式化的数据输出到标准输出(通常是终端/控制台)。
  • 参数:
    • format:格式字符串,包含普通字符和格式说明符(如 %d, %s 等)。
    • ...:要输出的变量列表,与 format 中的格式说明符一一对应。
  • 返回值:
    • 成功:返回实际写入的字符数(不包括终止符 \0)。
    • 错误:返回负数。

2. fprintf

int fprintf(FILE *stream, const char *format, ...);
  • 功能:将格式化数据输出到指定的文件流(如 stdout, stderr, 或打开的文件)。
  • 参数:
    • stream:目标输出流(例如 stdout, stderr, 或 FILE* 文件指针)。
    • format:格式字符串。
    • ...:变量列表。
  • 返回值:
    • 成功:返回实际写入的字符数。
    • 错误:返回负数。
#include <stdio.h>

int main() {
    FILE *fp = fopen("log.txt", "w");
    if (fp) {
        fprintf(fp, "程序启动时间:%s\n", __TIME__);
        fclose(fp);
    }
    return 0;
}

3. sprintf

int sprintf(char *str, const char *format, ...);
  • 功能:将格式化数据写入字符串 str。
  • 参数:
    • str:用于存储输出结果的目标缓冲区。
    • format:格式字符串。
    • ...:变量列表。
  • 返回值:
    • 成功:返回写入 str 中的字符数(不包括终止符 \0)。
    • 错误:返回负数。

4. snprintf

int snprintf(char *str, size_t size, const char *format, ...);
  • 功能:安全版本的 sprintf,最多写入 size 个字符到 str。
  • 参数:
    • str:目标缓冲区。
    • size:缓冲区大小(包括终止符 \0 的空间)。
    • format:格式字符串。
    • ...:变量列表。
  • 返回值:
    • 如果输出长度小于 size,则返回写入的字符数(不含终止符)。
    • 如果输出长度 >= size,则返回应写的字符数(不包括终止符),表示被截断。
#include <stdio.h>

int main() {
    char buffer[20];
    const char *name = "ZhangSan";
    const char *msg = "你好";

    // 最多写入 20 字节(包括 \0)
    snprintf(buffer, sizeof(buffer), "%s: %s", name, msg);
    printf("消息:%s\n", buffer);
    return 0;
}

二、格式化输入函数

5. scanf

int scanf(const char *format, ...);
  • 功能:从标准输入读取格式化数据,并将其存储到变量中。
  • 参数:
    • format:格式字符串,描述输入格式(如 %d, %s 等)。
    • ...:变量地址列表,用于接收解析后的数据。
  • 返回值:
    • 成功:返回成功赋值的输入项数量。
    • 失败或遇到 EOF:返回 EOF。
#include <stdio.h>

int main() {
    int num;
    printf("请输入一个整数:");
    scanf("%d", &num);
    printf("你输入的是:%d\n", num);
    return 0;
}

6. fscanf

int fscanf(FILE *stream, const char *format, ...);
  • 功能:从指定的文件流(如文件)中读取格式化数据。
  • 参数:
    • stream:输入流(例如 stdin, 或通过 fopen 打开的文件)。
    • format:格式字符串。
    • ...:变量地址列表。
  • 返回值:
    • 成功:返回成功赋值的输入项数量。
    • 失败或遇到 EOF:返回 EOF。
#include <stdio.h>

int main() {
    // 先创建测试文件
    FILE *out = fopen("data.txt", "w");
    fprintf(out, "100 3.14 hello\n");
    fclose(out);

    // 读取文件
    FILE *in = fopen("data.txt", "r");
    int id;
    float pi;
    char word[20];

    fscanf(in, "%d %f %s", &id, &pi, word);
    printf("ID: %d, Pi: %.2f, Word: %s\n", id, pi, word);
    fclose(in);
    return 0;
}

7. sscanf

int sscanf(const char *str, const char *format, ...);
  • 功能:从字符串 str 中提取格式化数据。
  • 参数:
    • str:源字符串。
    • format:格式字符串。
    • ...:变量地址列表。
  • 返回值:
    • 成功:返回成功赋值的输入项数量。
    • 失败或没有匹配:返回 0。
    • 遇到 EOF:返回 EOF。
#include <stdio.h>

int main() {
    const char *line = "name: Alice, age: 22, score: 95.5";
    char name[20];
    int age;
    float score;

    // 从字符串中提取数据
    sscanf(line, "name: %s, age: %d, score: %f", name, &age, &score);
    printf("姓名:%s,年龄:%d,分数:%.1f\n", name, age, score);
    return 0;
}

✅ 总结对比表

函数输入/输出目标典型用途
printf屏幕(stdout)调试输出、用户提示
fprintf文件、流写日志、保存数据
sprintf字符数组(内存)拼接字符串
snprintf字符数组(安全)安全拼接字符串(推荐)
scanf键盘(stdin)用户输入整数、字符串等
fscanf文件读取结构化文本文件
sscanf字符串解析字符串中的字段(非常实用)

三、变参形式函数(支持可变参数列表)

这些函数接受一个 va_list 类型的参数,用于处理可变参数列表,适用于封装自己的日志或打印函数。

8. vprintf

int vprintf(const char *format, va_list ap);
  • 输出到标准输出,使用 va_list。

9. vfprintf

int vfprintf(FILE *stream, const char *format, va_list ap);
  • 输出到指定流,使用 va_list。

10. vsprintf

int vsprintf(char *str, const char *format, va_list ap);
  • 写入字符串,使用 va_list。⚠️ 不检查缓冲区大小。

11. vsnprintf

int vsnprintf(char *str, size_t size, const char *format, va_list ap);
  • 安全版本的 vsprintf,限制写入字符数。

总结对比表:

函数名输入/输出目标类型是否安全支持变参
printf输出标准输出否❌
fprintf输出文件流否❌
sprintf输出字符串否❌
snprintf输出字符串✅❌
scanf输入标准输入否❌
fscanf输入文件流否❌
sscanf输入字符串否❌
vprintf输出标准输出否✅
vfprintf输出文件流否✅
vsprintf输出字符串否✅
vsnprintf输出字符串✅✅

STM32 HAL 模拟I2C从机实战:软件实现与多设备通信优化 本文详细介绍了STM32 HAL库下软件模拟I2C从机的实现方法,包括GPIO开漏配置、基础信号实现、数据收发函数编写和多设备通信优化策略。通过灵活的软件模拟方案,解决了硬件I2C接口数量限制和稳定性问题,为多传感器数据采集等应用提供了可靠的通信保障。 阅读详情

相关推荐

【数字电源/MATLAB+PLECS】如何进行 Buck 数字电源仿真(二)PLECS 搭建开环 Buck 功率级

本文介绍了如何在PLECS中搭建开环Buck功率级模型,验证数字电源设计的基本思路。重点内容包括: 明确开发顺序:先开环验证功率级,再闭环设计控制器 搭建关键组件:输入电源、PWM模块、MOSFET开关、续流二极管、LC滤波电路及负载 设置初始参数:24V输入、12V输出、200kHz开关频率、22μH电感、100μF电容 测量关键波形:MOSFET Vds验证开关动作、电感电流纹波和输出电压稳态值 提供完整仿真模型和GitHub资源,便于读者复现验证 文章强调通过开环测试先确保功率级正确性,为后续闭环控制

weixin_43234123的博客 1218

C语言中格式化输入输出函数(转)

1.1.1 格式化输入输出函数 一、printf()函数 printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出 信息。在编写程序时经常会用到此函数。printf()函数的调用格式为: printf("...

cqwf95925的博客 464

MIKE11实战:平原河网水动力建模从入门到精通(附GIS数据处理技巧)

本文系统介绍了MIKE11软件在平原河网水动力建模中的完整实战流程。从GIS数据预处理、河网构建、参数率定到结果分析,详细阐述了构建可靠数字孪生模型的关键步骤与技巧,旨在帮助水利工程师高效解决平原地区复杂水流模拟的挑战,为防洪决策提供科学依据。

weixin_28419039的博客 688

格式化输入输出函数

格式化输入输出函数 在C语言中格式化输入函数主要就是scanf(或scanf_s),格式化输出函数是printf函数。 格式化输入输出函数,能够对各种类型的数据混合地输入输出,主要是依靠一个格式控制字符串来实现的。 1、scanf/或sscanf函数和scanf_s或sscanf_s函数 ---------------------------scanf函数或scanf_s函数---------------------------- scanf函数是从标准输入流中读取用户输入的一段或多段文字,并将每段文字转换

m0_51418215的博客 4428

Windows(Win10、Win11)本地部署开源大模型保姆级教程

最近开源大模型可谓闹的沸沸扬扬,尤其是Microsoft开源的和Meta开源的llama3 70b,评测都已经接近了的水平。鉴于还有很多同学不会在上部署和使用本地模型,因此我们出一期保姆级教程。本文讲述了如何在上本地部署大模型。从最基础的软件安装到环境配置都进行了截图展示,希望对非计算机的同学也有所帮助。AI时代我们每个人都必须要掌握一些AI知识,相信不断学习的你一定不会被AI淘汰。这只是开始,后面我们还有很多工作要做,尤其是提示词和智能体。

AIGIS的博客 3万+

XDS110 USB Debug Probe连接错误-260:CCS Theia环境下的诊断与修复指南

本文详细解析了CCS Theia环境下XDS110 USB Debug Probe连接错误-260的诊断与修复方法。从硬件连接到驱动状态、固件更新到软件配置,提供了全面的排查指南,帮助开发者快速解决这一常见的调试器通信障碍问题,确保嵌入式开发工作流畅进行。

hope8的博客 281

C语言:格式化输入输出函数

格式化输入输出函数 printf scanf

weixin_62319821的博客 3297

蓝牙钥匙 第48次 全面解析防中继攻击保护:从原理到防护技术实践

中继攻击已成为物联网安全领域的重要威胁,2023年全球相关损失达数十亿美元。本文深入分析中继攻击原理,揭示其通过转发设备延长通信距离而不破解加密的特点。重点探讨两种关键防护技术:基于距离测量的方法(包括UWB超宽带技术)可精确检测异常距离;基于时间戳的挑战-响应机制则通过严格时间窗口识别中继延迟。文章还提出多层次防护体系构想,结合AI异常检测和量子安全协议等前沿技术。研究显示,集成多种防护技术并遵循行业标准是应对中继攻击的有效途径,为物联网设备安全提供重要参考。

IT深耕十余载,大道之简 1822

【C语言标准库函数】标准输入输出函数详解[1]:格式化输入输出&字符输入输出

本文详解介绍了C语言标准输入输出函数,包括printf/scanf用于格式化数据的输入输出,以及putchar/getchar用于字符的输入输出。这些函数是C语言编程中处理数据交换的基本工具,提供了灵活的数据交互方式。

byte轻骑兵的技术小窝 8183

PSINS惯性系初始对准与代码解读

本文参考“摇摆基座上基于信息的捷联惯导粗对准研究”(秦永元),以及“严恭敏博士后研究报告”,详细解读并推导了静基座惯性系对准算法,并与PSINS代码进行对照解读。

u011012050的博客 6752

AI大模型助力现金流精准预测案例详解

因为它的“注意力机制”能像“人一样思考”——比如,当预测“下周现金流”时,模型会重点关注“最近7天的销售数据”“未来7天的天气”“竞品是否有促销”这些关键因素,而忽略“去年同期的无关数据”。AI大模型不是“取代”财务人员,而是“赋能”他们——把财务人员从“重复的Excel操作”中解放出来,专注于“战略决策”(比如如何优化资金结构、如何提升资金利用率)。比如,“促销力度”这个特征,不是简单的“折扣率”,而是“折扣率×促销天数×覆盖SKU数量”,这样能更准确反映促销对现金流的影响。这些问题的核心,其实是。

AIGC应用创新大全的博客 1258

第二章- c语言中的格式化输出

格式输出函数:printf()printf函数格式说明。

百知_zmj的博客 1689

YOLOv8首创原创改进:即插即用|创新的轻量化非对称多级压缩LADH检测头

总结而言,本文介绍了一种名为轻量化非对称多级压缩LADH检测头的原创改进,该改进可与YOLOv8无缝适配,并显著提升了检测器的性能。在本文中,我们介绍了一种原创改进的检测头,名为轻量化非对称多级压缩LADH检测头,它可与YOLOv8无缝适配,显著提升了检测器的性能。此外,我们引入了多级压缩的概念,通过在不同的检测层级上应用不同程度的压缩,进一步提升了检测头的轻量化特性。具体而言,我们采用了逐级减少卷积核数量和通道数量的策略,以降低模型的参数量和计算复杂度,同时保持较高的检测精度。

IbcVue的博客 2180

教你一招如何半小时把C语言的 scanf printf sscanf sprintf fscanf fprintf wscanf wprintf 玩出花来

1. scanf 与 printf 2. sscanf 与 sprintf 3. fscanf 与 fprintf 4. wscanf 与 wprintf

mgzdwm的博客 1671

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C语言sscanf和sprintf函数详解

是 C 语言中强大的字符串操作函数,但需要谨慎使用以避免缓冲区溢出问题。是 C 标准库中的一个函数,用来从字符串中逐个解析和提取格式化的数据,类似于。函数,但它是从字符数组(字符串)中读取数据,而不是直接从标准输入读取数据。提供的一个函数,用于格式化字符串并将其存储到字符数组中。的结果不是打印到标准输出,而是存储到指定的字符串缓冲区中。,可以实现高效的数据解析,非常适用于处理固定格式的字符串。,能够指定写入到目标数组的最大长度,从而避免溢出风险。指定的格式进行解析,将结果存储到后续提供的参数中。

本博客分享软硬件一体化开发实战。硬件涵盖 PCB 设计、STM32 等 MCU 底层开发;软件包含 C++、Rust,Qt/QML、PyQt、Slint、TouchGFX、LVGL 各类 GUI 框架。方便软硬件开发者查阅学习。欢迎关注! 1214

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【C语言】sprintf和sscanf详解

sscanf函数:从字符串中提取格式化数据sprintf函数:将格式化数据放到字符串中。

Shengmc的博客 1156

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C语言程序设计:标准输入输出函数

摘要:介绍C语言标准库的输出输出函数,并自己实现简易版printf

qq_53652592的博客 2270

sscanf函数和sprintf函数极简概述

适用于从结构化字符串(如日志、协议报文)中提取数据,其灵活性依赖于格式化字符串的设计。需注意安全性和错误处理,尤其在处理用户输入时推荐结合宽度限制和返回值验证‌。是 C/C++ 标准库中用于将格式化数据写入字符串的函数,功能类似。,但输出目标是字符数组而非控制台。

2303_80671820的博客 1305

C语言常用输入输出函数总结

本文整理了C语言常用输入输出函数,包括printf/scanf(格式化I/O)、getchar/putchar(字符I/O)、gets/puts(字符串I/O)等,并配有示例说明。重点介绍了各函数功能及使用注意事项,如scanf必须传地址、gets已被弃用、Windows特有函数等。同时解释了缓冲区处理方法和常见错误,帮助开发者正确使用这些函数进行控制台交互和字符串处理。掌握这些基础I/O函数对C语言编程至关重要。

shark_dev的博客 1099

11. C语言 sprintf() 和 sscanf()

操作方向函数示例类似操作写入字符串sprintf()格式化输出到字符串printf()输出到屏幕从字符串读取sscanf()从字符串中提取数据scanf()从键盘输入安全版本snprintf()限制输出长度——函数作用方向典型用途安全版本sprintf()格式化输出到字符串输出构造字符串、调试打印snprintf()sscanf()从字符串读取数据输入协议解析、配置读取——printf()输出到屏幕输出控制台显示——scanf()从键盘读取输入输入用户输入——

2301_78486960的博客 670

c c++ 函数内数组初值_C标准库函数sprintf和sscanf的使用

↑↑↑ 点击上方公众号名称关注,不放过任何转变的机会。✎编 者 悟 语 你每一次的尝试,都有每一次的记述,就是这一次次的记述,为你写就了前路。文 章 导 读 今天带大家学习了下C标准库中的sprintf和sscanf函数基础内容及使用方法,我们在数据的格式话数据输入和输出的时候会用到它们。1sprintf函数1)功能 sprintf是格式化输出...

weixin_39617405的博客 155

scanf/fscanf/sscanf和printf/fprintf/sprintf的对比

scanf/fscanf/sscanf和printf/fprintf/sprintf的使用和对比

shylyly_的博客 1833

使用sscanf()和sprintf()处理字符数组的格式化输入输出

字符数组的格式化输入输出

JunJie的个人博客 1607

C语言——常用的库函数(sscanf, sprintf, strtok, strstr)

三个字符串按 “% s % s % s” 的格式(子串间加空格)拼接,输出到。,表示继续分割上一次的字符串。(字符串格式)读取 3 个以。,读取到下一个空白符为止。表示按逗号或分号分割)。分隔的子串,分别存入。

2402_83580126的博客 295

【C/C++】sprintf与sscanf函数的使用

【代码】【C/C++】sprintf与sscanf函数的使用。

bitenum的博客 640

sscanf函数和sprintf函数

sscanf 函数是 C 语言标准库中的一个函数,用于从字符串中读取格式化的输入。这个函数类似于 scanf,但 scanf 是从标准输入(如键盘)读取,而 sscanf 是从字符串中读取。它对于解析和提取字符串中的特定数据非常有用。formatscanf...formatsscanf 函数一般用作将字符串转换为数值变量。函数成功返回匹配并赋值的输入项的数量。运行结果:formatsscanfformatsscanf。

zxts123456的博客 484
上一篇: 【C语言】标准库字符串操作strstr、strcmp函数原型、参数说明以及返回值描述
下一篇: 【C语言】标准库中常用内存操作函数大全(memcpy memset)
思路可以啊
博客等级 码龄6年 91粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值