snprintf()函数使用方法

摘要:
sprintf无法检查目标字符串的长度。intsnprintf(char*str)可以将最大大小为-1的字符从源字符串复制到目标字符串。但是当使用snprintf时,您真的知道参数中大小的含义吗?假设我想将一个char类型的变量打印成2位十进制系统,snprintf(str,应该写sizeof(str)。因此,建议的编写方法是:sizeof(str),size是限制最终dest中的字符数,

众所周知,sprintf不能检查目标字符串的长度,可能造成众多安全问题,所以都会推荐使用snprintf.

自从snprintf代替了sprintf,相信大家对snprintf的使用都不会少,函数定义如下:

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

函数说明:

最多从源串中拷贝size-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为size的话,将不会溢出。

函数返回值:

若成功则返回欲写入的字符串长度,若出错则返回负值。

但是大家在使用snprintf的时候是否真的清楚参数里size的意思呢?看下面的例子:

假设我想将一个char类型的变量打印成2位的10进制,我应该怎么写呢?

char a='a';
char str[20];
snprintf(str,2,"%02d",a);

上面这么写,对不对呢,错了。

1) 2不应该是2,应该是3.
2) 也不建议直接写3,应该写sizeof(str)

所以建议的写法是:

char a='a';
char str[3];//再大点也没有问题
snprintf(str,sizeof(str),"%02d",a);

解释如下:

size是限定最终生成的dest的字符数,最多拷贝size-1个字符; 一般情况下size会取sizeof(dest),这是为了dest不溢出.

在snprintf(dest, size, "str: %s ", src)中如果size-1大于等于"str: %s "的长度,则把"str: %s "都拷贝到dest; 如果size-1小于"str: %s "的长度,则从"str: %s "拷贝size-1长度的字符串到dst,并且末尾置

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇log4net插入access自定义字段yum出现Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile解决方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

从MapX到MapXtreme2004[12]SearchNearest!

  “/xy”应用程序中的服务器错误。 searchInfo.SearchResultProcessor must be null.说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentException: searchInfo.Sea...

go-swagger的简单使用

一、下载go-swagger go-swagger 官方下载 根据不同个的操作系统选择对应的 二、添加环境变量 2.1 window swagger_windows_amd64.exe 将swagger_windows_amd64.exe 重命名 成 swagger.exe 然后将该软件放到$GOROOT/bin 中 2.2 linux swagger...

手把手写一个html_json信息源

html_json用于从网页里提取json数据。 这里用新浪读书的书讯举个例子,手把手写一个html_json信息源。 打开新浪读书的首页,可以看到页面下方有最新、书讯、童书、小说等几个Tab,这里我们提取书讯的内容。 查看页面的源码,找不到书讯的内容。 这是因为网站使用了json技术:额外加载了json对象、并通过javascript把json的内容显...

JS日历插件

一、简介 1. 注意事项 (1)My97DatePicker目录是一个整体,不可破坏里面的目录结构,也不可对里面的文件改名,可以改目录名; (2)各目录及文件的用途:         WdatePicker.js 配置文件,在调用的地方仅需使用该文件,可多个共存,以xx_WdatePicker.js方式命名         config.js 语言和皮肤配...

阿里消息队列中间件 RocketMQ源码解析:Message发送&接收

关注微信公众号:【芋艿的后端小屋】有福利: RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表 RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。 新的源码解析文章实时收到通知。每周更新...

h5---链接

在标题下方加入如下代码实现链接下方下划线取消 <style> a:link {text-decoration: none;color:red;} a:visited {color:green;text-decoration:none;} a:hover  {color:blue;text-decoration:underline;} a:ac...