C++中sprintf使用的方法与printf的区别分析
本文实例讲述了C++中sprintf使用的方法与printf的区别。分享给大家供大家参考。具体分析如下:
首先我们在MSDN看一下printf的原型和sprintf的原型
int printf( const char *format [, argument]... );
和
int sprintf( char *buffer, const char *format [, argument] ... );
从定义来看两者的功能其实很相似的。
如果你接触的控制台的程序较多的话,见到printf的比较多,printf函数打印结果到屏幕上,而sprintf函数可以完成其他数据类型转换为字符串。
从以下几点来说明一下
(1)函数的中前两个参数是固定外,可选参数是任意个,buffer是存放字符串指针或者数组名字,fromat是格式化字符串,只要是printf使用的格式化字符串,在sprintf都可以使用,格式化字符串是该函数的精髓。
(2)首先可以把一个整型数据格式化为字符串。比如:
char str[20];
int i_arg = 12345;
sprintf(buf,"%-6d",i_arg);
(3)看一个浮点类型的例子。比如:
char str[20];
double d_arg = 3.1415926;
sprintf(str,"%6.2f",d_arg);
可以控制精度
(4)连接两个字符串,也可以将多个字符串连接起来,%m.n在字符串的输出中,m表示宽度,字符串共占的列数;n表示实际的字符数。%m.n在浮点数中,m也表示宽度,n表示小数的位数。比如:
char dest[256];
char src1[] = {'a','b','c','d','e'};
char src2[] ={'1','2','3','4'};
sprintf(dest,"%.5s%.4s",src1,src2);
也可以动态的截取字符串的某一些字符:
char dest[256];
char src1[] = {'a','b','c','d','e'};
char src2[] ={'1','2','3','4'};
sprintf(dest,"%.*s%.*s",2,src1,3,src2);
sprintf(str,"%*.*",10,4,d_arg);
补充一点,sprintf的返回值就是字符串的字符的个数,也就是strlen(str)的结果,
也可以打印某个参数的地址
int i=2;
sprintf(str,"%0*x",sizeof(void *),&i);
或者用:
sprintf(str,"%p",&i);
此外这些都是都是多字节类型(ANSI)的函数,而对于unicode类型的应该使用的相似的函数:
int wprintf( const wchar_t *format [, argument]... );
int swprintf( wchar_t *buffer, const wchar_t *format [, argument] ... );
用法和上面的很相似的,就是类型不同而已,
对于printf和sprintf该函数的包含在<stdio.h>头文件
而sprintf和wprintf函数包含在<stdio.h>或者<wchar.h>头文件中。
希望本文所述对大家的C++程序设计有所帮助。
相关推荐
-
echo, print, printf 和 sprintf 区别
- echo 是命令,不能返回值.echo后面可以跟很多个参数,之间用分号隔开,如: echo $myvar1; echo 1,2,$myvar,"bold"; - print 是函数,可以返回一个值,只能有一个参数. - printf 函数,把文字格式化以后输出,如: $name="hunte"; $age=25; printf("my name is %s, age %d", $name, $age); - sprintf 跟pri
-
浅析C语言中printf(),sprintf(),scanf(),sscanf()的用法和区别
printf语法: #include <stdio.h>int printf( const char *format, ... ); printf()函数根据format(格式)给出的格式打印输出到STDOUT(标准输出)和其它参数中.返回值是输出的字符数量.sprintf语法: #include <stdio.h>int sprintf( char *buffer, const char *format, ... );sprintf()函数和printf()类似,格式控制完全一样
-
字符串拷贝函数memcpy和strncpy以及snprintf 的性能比较
问题:函数memcpy(dest, src, sizeof(dest)).strncpy(dest, src, sizeof(dest))和snprintf(dest, sizeof(dest), "%s", src)都可以将src字符串中的内容拷贝到dest字符串中.哪一种方式效率最高呢?就是说,哪种方式性能最好呢?解决办法:1. 建立三个文件test_memcpy.c,test_strncpy.c和test_snprintf.c:文件test_memcpy.c: 复制代码 代码如下
-
基于C语言sprintf函数的深入理解
printf 可能是许多程序员在开始学习C语言时接触到的 第二个函数(我猜第一个是main),说起来,自然是老朋友了,可是,你对这个老朋友了解多吗?你对它的那个孪生兄弟sprintf了解多吗?在将各种类 型的数据构造成字符串时,sprintf的强大功能很少会让你失望.由于sprintf跟printf在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出.这也导致sprintf比printf有用得多.所以本文着重介绍sprintf,有时也穿插着用用 pritnf.
-
C语言printf详细解析
1.类型: 表示输出类型的格式字符 格式字符意义 a 浮点数.十六进制数字和p-计数法(C99 A 浮点数.十六进制数字和p-计数法(C99)c 输出单个字符d 以十进制形式输出带符号整数(正数不输出符号)e 以指数形式输出单.双精度实数E 以指数形式输出单.双精度实数f 以小数形式输出单.双精度实数 g 以%f%e中较
-
C++中sprintf()函数的使用详解
在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望.由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出.这也导致sprintf 比printf 有用得多.sprintf 是个变参函数,定义如下:int sprintf( char *buffer, const char *format [, argument] ... );除了前两个参数类型固定外,后面可以接任意多个参数.而它的精华,显然就在第二个参
-
strncpy与snprintf 的用法比较
strncpy的正确用法: strncpy(dest, src, sizeof(dest)):dest[sizeof(dest)-1] = '\0'; snprintf的正确用法:snprintf(dest, sizeof(dest), "%s", src); strncpy的问题:1.size一定要用sizeof(dest)或sizeof(dest)-1,不可误用sizeof(src). 2.手工填0. 务必要把dest的最后一个字节手工设置为0. 因为strncpy仅在src的长度
-
基于C++中sprintf的错误总结详解
sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访问错误.下面对sprintf 常出错误问题进行简单的总结: 1.缓冲区溢出:第一个参数的长度太短了,解决办法:将第一个参数的长度扩大.打印字符串时,尽量使用"%.ns"的形式指定最大字符数char buf[5];sprintf(buf, ":%d", 3246);printf("buf is %s\n", buf); 将buf修改为char buf[6]
-
深入分析C中不安全的sprintf与strcpy
经过跟踪调试, 发下不少 bug 源于 sprintf 和 strcpy 之类可能造缓冲区溢出的函数. 应该将所有的 sprintf 用 snprintf 替换.将 strcpy 用 strncpy 替换, 并且将末尾字节设置为 ''\0' . 复制代码 代码如下: strncpy(buf, str, len);buf[len] = 0;
-
C++中sprintf使用的方法与printf的区别分析
本文实例讲述了C++中sprintf使用的方法与printf的区别.分享给大家供大家参考.具体分析如下: 首先我们在MSDN看一下printf的原型和sprintf的原型 复制代码 代码如下: int printf( const char *format [, argument]... ); 和 复制代码 代码如下: int sprintf( char *buffer, const char *format [, argument] ... ); 从定义来看两者的功能其实很相似的. 如果你接触的
-
VC中CWinThread类以及和createthread API的区别分析
本文实例讲述了VC中CWinThread类以及和createthread API的区别分析,分享给大家供大家参考.具体分析如下: CWinThread CObject └CCmdTarget └CWinThread CWinThread对象代表在一个应用程序内运行的线程.运行的主线程通常由CWinApp的派生类提供:CWinApp由CWinThread派生.另外,CWinThread对象允许一给定的应用程序拥有多个线程. CWinThread支持两种线程类型:工作者线程(Worker
-
JS forEach和map方法的用法与区别分析
本文实例讲述了JS forEach和map方法的用法与区别.分享给大家供大家参考,具体如下: 一.前言 forEach()和map()两个方法都是ECMA5中Array引进的新方法,主要作用是对数组的每个元素执行一次提供的函数,但是它们之间还是有区别的.jQuery也有一个方法$.each(),长得和forEach()有点像,功能也类似.但是从本质上还是有很大的区别的,那么我们探探究竟. 二.forEach和map语法 2.1.语法: //forEach array.forEach(callba
-
Android中的Dalvik和ART详解及区别分析
要想知道Dalvik和ART区别分析,首先我们要分别知道这两者是什么? 什么是Dalvik? Dalvik是Google公司自己设计用于Android平台的虚拟机. Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一. 它可以支持已转换为 .dex格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统. Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用
-
javascript中apply和call方法的作用及区别说明
一.call和apply的说明 1.call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性.既然作为方法的属性,那它们的使用就当然是针对方法的了,这两个方法是容易混淆的,因为它们的作用一样,只是使用方式不同. 2.语法:foo.call(this, arg1,arg2,arg3) == foo.apply(this,
-
C#中new的用法及与override的区别分析
C#中new的用法有三种: (1)new是运算符,用于创建对象和调用构造函数.如Class1=new Class1();也可以为值类型调用默认的构造函数如int a=new int();此时a=0. (2)new是修饰符,用于隐藏基类成员的继承成员.override不能隐藏积累成员的继承成员.如: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace A {
-
jQuery中的.bind()、.live()和.delegate()之间区别分析
DOM树 首先,可视化一个HMTL文档的DOM树是很有帮助的.一个简单的HTML页面看起来就像是这个样子: 事件冒泡(又称事件传播) 当我们点击一个链接时,其触发了链接元素的单击事件,该事件则引发任何我们已绑定到该元素的单击事件上的函数的执行. 复制代码 代码如下: $('a').bind('click',function(){alert('that tickles!')}) 因此一个单击操作会触发alert函数的执行. click事件接着会向树的根方向传播,广播到父元素,然后接着是每个祖先元素
-
java中重载、覆盖和隐藏三者的区别分析
重载:方法名相同,但参数不同的多个同名函数 注意:1.参数不同的意思是参数类型.参数个数.参数顺序至少有一个不同 2.返回值和异常以及访问修饰符,不能作为重载的条件(因为对于匿名调用,会出现歧义,eg:void a ()和int a() ,如果调用a(),出现歧义) 3.main方法也是可以被重载的 覆盖:子类重写父类的方法,要求方法名和参数类型完全一样(参数不能是子类),返回值和异常比父类小或者相同(即为父类的子类),访问修饰符比父类大或者相同 两同两小一大 注意:子类实例方法不能覆盖父类的
-
PHP中break及continue两个流程控制指令区别分析
以下举例说明break 用来跳出目前执行的循环,并不再继续执行循环了. 复制代码 代码如下: <?php $i = 0; while ($i < 7) { if ($arr[$i] == "stop") { break; } $i++; } ?> continue 立即停止目前执行循环,并回到循环的条件判断处,继续下一个循环. 复制代码 代码如下: <?php while (list($key,$value) = each($arr)) { if ($key =
-
PHP中删除变量时unset()和null的区别分析
第一种方法:$varname=null 第二种方法:unset($varname) 这两种方法都可以删除变量,但结果有些许的差别. 代码: 复制代码 代码如下: <?php $a = array( 'a' => 'a', 'b' => 'b' ); $b = array( 'a' => 'a', 'b' => 'b' ); $a['b'] = null; unset($b['b']); print('<pre>'); print_r($a); print('<
随机推荐
- asp.net小谈网站性能优化
- php中支持多种编码的中文字符串截取函数!
- Powershell小技巧--远程对比服务配置
- Android Activity 与Service进行数据交互详解
- 禁止运行logo1.exe病毒.reg
- Android ScrollView滑动实现仿QQ空间标题栏渐变
- Asp .net 调用带参数的存储过程
- JS实现上传图片的三种方法并实现预览图片功能
- asp目录读写权限检测脚本 TestFolder
- 详解docker镜像centos7配置Java运行环境
- PHP MSSQL 分页实例
- JSP由浅入深(2)—— 第一个JSP
- oracle忘记sys/system/scott用户密码的解决方法
- javascript实现通过表格绘制颜色填充矩形的方法
- JS与jQuery遍历Table所有单元格内容的方法
- ES6 javascript的异步操作实例详解
- 给网站上的广告“加速”显示的方法
- JavaScript根据CSS的Media Queries来判断浏览设备的方法
- android 传感器(OnSensorChanged)使用介绍
- Android中Handler与Message的简单实例