snprintf的用法

简介: 简要介绍了snprintf的常用方法,能大大的简化我们的代码

snprintf()是一个C语言标准库中的函数,用于将一个格式化的字符串写入一个字符数组中。与其类似的函数有sprintf(),但snprintf()提供了更好的安全性, 避免了可能的缓冲区溢出问题。

int snprintf(char *str, size_t size, const char *format, ...);

其中,str为指向输出字符数组的指针,size表示字符数组的最大长度,format为格式化字符串,最后的省略号表示可以传入任意数量和类型的参数,这些参数将按照format中给定的格式进行格式化输出。
snprintf() 函数的返回值是输出到 str 缓冲区中的字符数,不包括字符串结尾的空字符 \0。
snprintf()函数在将格式化字符串写入字符数组时会控制输出的长度,避免字符数组溢出的情况发生。如果输出长度超过了size的限制,超出部分会被截断,并保证最终的字符数组以'\0'结尾。
snprintf() 函数在格式化字符串时,可以避免缓冲区溢出。
如果格式化后的字符串的长度超过了 size-1,则 snprintf() 函数只会写入 size-1 个字符,并在字符串的末尾添加一个空字符(\0)以表示字符串的结束。
如果 str 参数为 NULL,则 snprintf() 函数不会写入任何字符,但仍然返回计划写入的字符数。
如果 size 参数为 0,则 snprintf() 函数不会写入任何字符,但仍然返回计划写入的字符数。
snprintf() 函数不支持浮点数的格式化,如果需要格式化浮点数,应使用 sprintf() 函数。
在使用 snprintf() 函数时,需要注意格式化字符串的安全性,尤其是在使用用户提供的字符串时。如果格式化字符串中包含用户输入的字符串,并且该字符串中包含格式化指令,可能会导致安全问题。可以使用一些安全的字符串格式化库,例如 snprintf_s(),_snprintf(),_sntprintf() 等

HEX数组转字符串
例如有以下代码,需要把保存MAC地址的数组mac_buff[6]的内容转换成字符串并保存在mac_str[16]中:

#include <stdio.h> 

uint8_t mac_buff[6] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB} 

/* MAC地址转成字符串后是12个字符,加上\0结尾,总共需要13个sizeof(char)保存,为了留有余量,且保证数组的空间是4的整数倍,因此定义数组大小为16个Byte */ 
uint8_t mac_str[16]; 

int main(void) 
{ 
  snprintf(mac_str, sizeof(mac_str), "%.2x%.2x%.2x%.2x%.2x", mac_buff[0], mac_buff[1], mac_buff[2], mac_buff[3], mac_buff[4], mac_buff[5]); 
  printf("mac_str:%s.\r\n", mac_str); 

  return 0; 
}

该程序运行后的结果是:mac_str:1234567890AB

拼接多个字符串

#include <stdio.h> 

int main() { char buffer[100]; int bytes_written = snprintf(buffer, 100, "output:%s-%s-%d", "Hello", "World", 123); printf("%s\n", buffer); printf("Bytes written: %d\n", bytes_written); return 0; }
相关文章
|
机器学习/深度学习 编解码 算法
开源! ! ! 轻量级多功能按键驱动-LiteButton
开源! ! ! 轻量级多功能按键驱动-LiteButton
|
程序员 开发工具 git
批处理--节约你的开发时间
批处理--节约你的开发时间
|
算法 Ubuntu 物联网
ESP32-C3入门教程 网络 篇(二、 Wi-Fi 配网 — Smart_config方式 和 BlueIF方式)
经过上一篇的WiFI入门篇,我们知道了WiFi初始化方式 和学会了WiFi的几种工作方式, 在实际应用中,环境复杂多变,在固件中输入SSID 的方式太不通用了, 所以肯定是需要学习一下如何在不同的环境中联网,就是所谓的配网。 ESP32-C3的配网方式有多种,本文主要说明测试 Smart方式 和 BlueIF方式。
4005 0
ESP32-C3入门教程 网络 篇(二、 Wi-Fi 配网 — Smart_config方式 和 BlueIF方式)
|
3月前
|
弹性计算 监控 测试技术
阿里云199元云服务器:u1实例,性能均衡,长效特惠,适合初创企业上云
本文介绍了阿里云延续至2029年3月31日的云服务器长效特惠活动,核心介绍面向企业用户开放的通用算力型u1实例2核4G5M配置,该实例搭配80G ESSD Entry云盘,活动价仅199元/年,新老企业用户均可同等购买,活动期内续费同价。文章详细拆解了该实例的均衡性能、适用场景与多地域覆盖优势,并将其与38元起轻量应用服务器、99元2核2G经济型e实例进行多维度对比,给出不同需求下的选型策略,为初创企业挑选高性价比入门云服务器提供清晰参考。
|
5月前
|
人工智能 API 数据库
【AI 尝鲜实验室】上新 | Open Notebook:NotebookLM 开源平替,让你拥有完全私有的 AI 笔记研究助手
Open Notebook 是 lfnovo 开源的私有化 AI 笔记助手(MIT 协议),支持 18+ 模型自由切换,可导入 PDF/视频/音频/网页等多格式资料,自动生成摘要、问答,并一键生成最多 4 人对话式 AI 播客。本实验通过阿里云计算巢一键部署,开箱即用,专为研究人员、学生及法律/医疗/金融等隐私敏感行业打造安全可控的云端知识库。
|
5月前
|
运维 安全 虚拟化
苹果云手机虚拟化方案优劣拆解 2026云端iOS设备避坑指南
2026年iOS云手机分真机托管与虚拟化两大路线:前者依托阿里云裸金属集群,复用原生硬件与系统,保障人脸验证、支付、挂机稳定性及账号安全;后者靠参数伪装,易触发风控、闪退封号。真机成本高但长期性价比优,虚拟化低价却风险极高。选型须匹配账号价值与使用周期。(239字)
|
5月前
|
存储 安全 前端开发
阿里云OSS从零到一完整实操指南:开通、Bucket、SDK集成、安全与成本全解
阿里云对象存储OSS是分布式高可靠对象存储服务,可存放图片、视频、文档、程序包等各类非结构化数据,广泛用于网站静态资源、文件备份、媒体存储、数据归档等场景。正式使用前必须完成账号实名与服务开通两步前置操作,任何环节缺失都会导致权限受限、调用失败。
1122 0
|
9月前
|
人工智能 安全 应用服务中间件
OpenClaw(Clawdbot)一键部署,打造滴滴出行助手,一键打车+实时查司机位置全攻略
OpenClaw(曾用名Clawdbot、Moltbot)的强大之处在于其高度可扩展的Skill(技能插件)系统,不仅能处理工作中的文档、代码需求,还能深度整合生活服务场景。其中,滴滴出行Skill就是极具实用价值的拓展——通过简单配置,就能让OpenClaw变身专属出行助手,实现查询可用车型、一键下单打车、实时追踪司机位置、取消订单等全流程操作,无需反复打开滴滴APP,在聊天窗口就能完成所有出行安排。
1828 15
|
缓存 Linux iOS开发
BleachBit系统清理工具软件下载安装教程!免费开源,清理垃圾文件,大幅提升电脑性能!
BleachBit是一款免费开源的系统清理工具,支持Windows、macOS和Linux,可深度清除垃圾文件、浏览器缓存及隐私数据,提升电脑性能与安全性。操作简单,功能强大,适合各类用户。
1472 1