博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sprintf_s的使用
阅读量:6068 次
发布时间:2019-06-20

本文共 1585 字,大约阅读时间需要 5 分钟。

int sprintf_s(char *restrict buffer, rsize_t bufsz,

              const char *restrict format, ...);

将数据格式化输出到字符串,sprintf_s()是sprintf()的安全版本,通过指定缓冲区长度来避免sprintf()存在的溢出风险。

sprintf_s原先只有windows的编译器才只支持,并不是C中的标准函数。

在C11标准中加入了对该函数的支持,但是是可选的,并非强制加入。

C11中规定,如果编译器实现了__STDC_LIB_EXT1__ 宏,那么就要支持对该函数的实现。

gcc编译器只是部分的支持C11标准,本人测试在ubuntu的gcc 5.4.0版本中也没有实现__STDC_LIB_EXT1__ 。

gcc中可以用snprintf函数简单替代sprintf_s,但是注意2者在实现上是有一定的区别,不是完全相同。

int snprintfchar *restrict buffer, int bufsz, 

              const char *restrict format, ... );

 

C11原文如下:

__STDC_LIB_EXT1__ The integer constant 201ymmL, intended to indicate support

for the extensions defined in annex K (Bounds-checking interfaces).
Implementations that do not define __STDC_LIB_EXT1__ are not required to conform to these
specifications.

 

C++网站给出的使用建议如下:

As all bounds-checked functions, printf_sfprintf_ssprintf_s, and snrintf_s 

are only guaranteed to be available if __STDC_LIB_EXT1__ is defined by the implementation

and if the user defines __STDC_WANT_LIB_EXT1__ to the integer constant 1 before including <stdio.h>.

  

参考用法如下:

#if defined(__STDC_LIB_EXT1__)  #if (__STDC_LIB_EXT1__ >= 201112L)    #define __STDC_WANT_LIB_EXT1__ 1 /* Want the ext1 functions */  #endif#endif#include 
#include
#include
#if (__STDC_WANT_LIB_EXT1__ == 1) char tempArray[20]; sprintf_s(tempArray, 20, "Int %d", 1);#endif

 Windows的中用法如下:

#if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)    sprintf_s(...)#else    sprintf(...)#endif

 

转载于:https://www.cnblogs.com/dirt2/p/6104198.html

你可能感兴趣的文章
消息队列
查看>>
《Android深度探索》第六章心得体会
查看>>
嵌入式服务器jetty,让你更快开发web
查看>>
【原创】基于ZYNQ7000的交叉编译工具链Qt+OpenCV+ffmpeg等库支持总结(二)
查看>>
【HDOJ】1493 QQpet exploratory park
查看>>
【HDOJ】3553 Just a String
查看>>
一共81个,开源大数据处理工具汇总(上)(转)
查看>>
并查集模版
查看>>
vue 使用a+ router.push的形式跳转时,地址栏不显示参数
查看>>
findOneAndUpdate的用法详解
查看>>
初始化函数1
查看>>
Jenkins自动发布代码实战篇
查看>>
VMware网络配置
查看>>
微信小程序怎么做出前端table的效果
查看>>
使用guava实现找回密码的tokenCache以及LRU算法
查看>>
微软软件开发技术二十年回顾-.NET框架篇
查看>>
[UML] UML中类之间的几种关系
查看>>
python中的sort、sorted排序
查看>>
校门外的树
查看>>
[Poi2000]病毒
查看>>