sprintf

函数功能:把格式化的数据写入某个字符串

头文件:stdio.h 
函数原型:int sprintf( char *buffer, const char *format [, argument] … ); 
返回值:字符串长度(strlen)

在将各种类型的数据构造成字符串时,sprintf 的功能很强大。sprintf 与printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多.。

printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。

输出格式控制:

%% 印出百分比符号,不转换。 
  %c 整数转成对应的 ASCII 字元。 
  %d 整数转成十进位。 
  %f 倍精确度数字转成浮点数。 
  %o 整数转成八进位。 
  %s 整数转成字符串。 
  %x 整数转成小写十六进位。 
  %X 整数转成大写十六进位。

示例:

#include<iostream>
#include<cstdio>using namespace std;int main()
{char str[20];char *s1="hello"; char *s2="world";sprintf(str,"%s %s",s1,s2);printf("%s\n",str);char str_1[20];int n,a=3,b=5;n=sprintf(str_1,"%d + %d = %d",a,b,a+b);//返回字符个数printf("[%s] :字符数为%d\n",str_1,n);char str_2[20];sprintf(str_2,"%x %o abcdefg",123,123);//控制输出字符串的转换为相应的进制数//分别转换为十六进制和八进制puts(str_2);sprintf(str_2,"%X %o",123,123);//给数组赋新值puts(str_2);//仅输出 "7B 173",说明sprintf向字符串str_2写入字符后,尾部自动加了'\0'cout<<str_2[8]<<endl;//输出为b  即str_2[7]='a' str_2[8]='b' ... 说明sprintf()知识重新修改了前面的字符。system("pause");return 0;
}

但是在MSDN中,有这样一段话:

使用 sprintf,无法限制编写的字符数,这意味着,使用 sprintf 的代码易出现缓冲区溢出。

使用sprintf_s更加安全一点。

sprintf_s()是sprintf()的安全版本,通过指定缓冲区长度来避免sprintf()存在的溢出风险。在使用VS2008时如果你使用了sprintf函数,那么编译器会发出警告:使用sprintf存在风险,建议使用sprintf_s。这个安全版本的原型是:

int sprintf_s(char *buffer,size_t sizeOfBuffer,const char *format [,argument] ... );

#include<iostream>
#include<cstdio>using namespace std;int main()
{char str[20];char *s1="hello"; char *s2="world";sprintf_s(str,sizeof(str),"%s %s",s1,s2);//sizeof(str)的大小必须大于等于待写入字符串的大小加一,否则会出错。printf("%s\n",str);char str_1[20];int n,a=3,b=5;n=sprintf_s(str_1,sizeof(str_1),"%d + %d = %d",a,b,a+b);//返回字符个数printf("[%s] :字符数为%d\n",str_1,n);char str_2[20];sprintf_s(str_2,sizeof(str_2),"%x %o abcdefg",123,123);//控制输出字符串的转换为相应的进制数//分别转换为十六进制和八进制puts(str_2);sprintf_s(str_2,sizeof(str_2),"%X %o",123,123);//给数组赋新值puts(str_2);//仅输出 "7B 173",说明sprintf_s向字符串str_2写入字符后,尾部自动加了'\0'cout<<str_2[8]<<endl;//未输出b,说明sprintf_s是对整个数组重新写入。system("pause");return 0;
}

详解sprintf()sprintf_s()相关推荐

  1. Arduino sprintf函数的用法详解

    Arduino sprintf函数的用法详解 :sprintf():把格式化的数据写入某个字符串缓冲区. 来自:stdio.h 原型 int sprintf( char *buffer, const ...

  2. php sprintf 后面补0,PHP数字前补0的自带函数sprintf 和number_format的用法(详解)

    下面小编就为大家带来一篇PHP数字前补0的自带函数sprintf 和number_format的用法(详解).小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 很多时候我们 ...

  3. C语言中的sprint函数,求sprintf函数的详解

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:求sprintf函数的详解,要附带例,粘贴来的也可以,只 问题详情:还有就是我还想要一些常用的宽度修饰之类的输入或者输出格式:回答: ...

  4. C语言中itoa系列函数及sprintf系列函数使用详解

    C语言中itoa系列函数及sprintf系列函数使用详解 itoa函数系列 该系列函数是广泛使用的非标准C语言和C++语言扩展功能,只能在windows编译器下使用,如果涉及到跨平台是不允许使用的,这 ...

  5. C 字符串函数 sprintf()、snprintf() 详解

    一.sprintf() 函数详解 在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望. 由于 sprintf 跟 printf 在用法上几乎一样,只是打印的目的地不同而已,前者 ...

  6. 20160203.CCPP体系详解(0013天)

    程序片段(01):数组.c+02.数组初始化语法.c 内容概要:数组 ///01.数组.c #include <stdio.h> #include <stdlib.h>//01 ...

  7. linux syslogd 源码,syslogd 详解二

    相关博文: syslogd 详解一 syslogd 详解三 1. 前言 上一篇博文中详细了分析了syslogd的架构,解析了syslogd的调用过程,以及syslog.conf 的详细使用方法,这一篇 ...

  8. linux c 设置utc时间,C/C++标准库之转换UTC时间到local本地时间详解

    前言 UTC 时间DateTime.UtcNow 和 系统本地时间 DateTime.Now 相差8个时区 ,美国本地时间和北京时间相差15个时区: 美国,而一般使用UTC时间方便统一各地区时间差异. ...

  9. php中读取大文件实现方法详解

    php中读取大文件实现方法详解 来源:   时间:2013-09-05 19:27:01   阅读数:6186 分享到:0 [导读] 本文章来给各位同学介绍php中读取大文件实现方法详解吧,有需要了解 ...

最新文章

  1. 【点云论文速读】点云高质量3D表面重建
  2. linux shell中 if else以及大于、小于、等于逻辑表达式介绍
  3. 行人识别学习资料整理2018
  4. 用Python实现队列
  5. C#二维数组的定义和初始化
  6. 飞鸽传书2011怎么用之启动常见问题(二)
  7. 数据科学入门与实战:玩转pandas之七数据分箱技术,分组技术,聚合技术
  8. RMQ+1/-1算法 [转]
  9. Hive Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
  10. linux编码合适修改_CentOS升级Linux内核备忘录
  11. Android AdapterViewFlipper
  12. eclipse中输入@符号自动提示Annotation
  13. 无法删除文件,无法读源文件或磁盘:U盘文件夹乱码无法删除的原因及解决方案...
  14. sat数学可以用计算机吗,SAT数学考试带计算机是否可以
  15. 直面大数据撞击这个时代——畅享网成功举办大数据应用沙龙
  16. C语言关于排序的十一个函数
  17. Python 语言及其应用 Chapter_3_Note_2 容器_列表_元组_字典_集合
  18. Java 流的使用总结
  19. 编程路上,送给处于迷茫中的你和自己
  20. php+撮合引擎,撮合引擎开发:数据结构设计

热门文章

  1. 汉语属于哪个语系_汉语语族的所属语系
  2. 基于Java实现动态数组
  3. WIFI关键器件选型
  4. 各大搜索引擎网站登录入口大全
  5. 什么是SSL双向认证,与单向认证证书有什么区别?
  6. android图形框架之surfaceflinger分析(一)
  7. 一个几乎免费的云服务器和虚拟主机平台
  8. anchor机制讲解
  9. 如是古籍数字化工具平台介绍---自动秒级识别古籍OCR
  10. 老司机 iOS 周报 #7