格式化输出字符串——sprintf

sprintf()跟printf()用法很相似,打印目的地不同。前者(sprintf)是打印到字符串中,后者(printf)直接在命令行上输出。 
sprintf() 是个变参函数,作用是格式化字符串。

函数原型为: 
int sprintf( char* buffer, const char* format [, argument], … ); //format格式和printf()的格式控制符一样

参数列表 
buffer:char型指针,指向将要写入的字符串的缓冲区。 
format:格式化字符串。 
[argument]…:可选参数,可以是任何类型的数据。 
返回值:字符串长度(strlen),打印到buffer中的字符数目

功能: 
1. 将数字变量转换为字符串 
2. 得到整型变量的16进制和8进制字符串 
3. 连接多个字符串

作用:

一:格式化字符串(常用)

char str[10] = {0};

//把整数123打印成一个字符串保存在str中
sprintf(str, "%d", 123); //输出:"123"

//可以指定宽度,不足的左边补空格:
sprintf(str, "%8d%8d", 123, 4567); //输出:"_1234567"
//当然也可以左对齐:
sprintf(str, "%-8d%8d", 123, 4567); //输出:"123_4567"

//也可以按照16进制打印:
sprintf(str, "%8x", 4567); //小写16进制,宽度占8个位置,右对齐。输出:____11d7
sprintf(str, "%-8X", 4567); //大写16进制,宽度占8个位置,左对齐。输出:11D7____

//左边补0 的等宽格式(十进制%d也可以)
sprintf(s, "%08X", 4567); //输出:"000011D7"

二:控制浮点数打印格式

浮点数使用格式符”%f”控制,默认保留小数点后6 位数字,比如: 
sprintf(s, "%f", 3.1415926); //输出:"3.141593" 
需要控制打印的宽度和小数位数时,使用:”%m.nf“格式。(m表示打印的宽度,n表示小数点后的位数。)

sprintf(s, "%10.3f", 3.1415626); //输出:" 3.142"
sprintf(s, "%-10.3f", 3.1415626); //输出:"3.142 "
sprintf(s, "%.3f", 3.1415626); //不指定总宽度,输出:"3.142"

int i = 100; sprintf(s, "%.2f", i); //输出:"0.00"

sprintf(s, "%.2f", (double)i); //输出:"100.00 "

spritnf 是个变参函数,除了前面两个参数之外,后面的参数都不是类型安全的。 
函数更没有办法仅仅通过一个“%f”,就能得知当初函数调用前参数压栈时,被压进来的到底是个整数还是个浮点数。 
保存整数的4字节的i,被强制当做8字节的浮点数解释了。

三:连接字符串

char s[20] = {0};
char a1[] = {‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘, ‘G‘};
char a2[] = {‘H‘, ‘I‘, ‘J‘, ‘K‘, ‘L‘, ‘M‘, ‘N‘};
// sprintf(s, "%s%s", a1, a2); //Don‘t do that!乱码
// sprintf(s, "%7s%7s", a1, a2); //乱码
sprintf(s, "%.7s%.7s", a1, a2); //输出:"ABCDEFGHIJKLMN"
sprintf(s, "%.6s%.5s", a1, a2); //输出:"ABCDEFHIJKL"

%m.ns ≈ %m.nf: 
m 表示占用宽度(字符串长度不足时补空格,超出了则按照实际宽度打印); 
n 表示从相应的字符串中最多取用的字符数, 用的多。 
尽量使用”%.ns”的形式指定最大字符数。

动态指定取用字符长度:sprintf 采用“*”来占位[指定宽度精度的常数数字的位置]。 
于是,上面的例子可以变成: 
sprintf(s, "%.*s%.*s", 7, a1, 7, a2); 
或者: 
sprintf(s, "%.*s%.*s", sizeof(a1), a1, sizeof(a2), a2);

实际上,前面介绍的打印字符、整数、浮点数等都可以动态指定那些常量值,比如:

sprintf(s, "%-*d", 4, ‘A‘); //输出:"65 "
sprintf(s, "%#0*X", 8, 128); //输出:"0X000080","#"产生0X
sprintf(s, "%*.*f", 10, 2, 3.1415926); //输出:" 3.14"

四:打印地址信息

调试程序时,想查看某些变量或者成员的地址。由于地址或者指针也不过是个32 位的数,可以用打印无符号整数的”%u”打印: 
sprintf(s, "%u", &i); 
用16 进制显示地址: 
sprintf(s, "%08X", &i); 
地址打印,sprintf 提供了专门的”%p”: 
sprintf(s, "%p", &i); 
≈ 
sprintf(s, "%0*x", 2 * sizeof(void *), &i);

原文地址:https://www.cnblogs.com/tianzeng/p/8964268.html

时间: 2024-11-06 09:44:56

格式化输出字符串——sprintf的相关文章

Python格式化输出字符串 (%, format(), f'')

格式说明符/占位符:% 目的:格式与内容分离,制作复杂的公共字符串模板,让某些位置变成动态可输入的. 用法:' %[datatype]  '  % (data, data, ...) %前设置输出格式,用引号括起来:%后设置输出内容,格式部分有几个%,内容部分就有几个数据,多个数据时用小括号括起来,并用逗号分隔. 需要输出%时,可以用%%转义,就取消了占位符的作用 print('3%%%s' % 'gg') 结果: 3%gg 整型 %o 八进制 ,%d  (或%i)十进制,%x 十六进制 pri

【PowerShell】格式化输出字符串

1 '{0:d4}' -f 10 2 '数字的补零';{} 3 '{0:f4}' -f 10 4 '保留小数位数';{} 5 '{0:p2}' -f 0.4567 6 '转换为百分比';{} 7 '{0:x}' -f 255 8 '转换为十六进制';{} 9 '{0:X}' -f 255 10 '以大写字母方式转换为十六进制';{} 11 '{0:X8}' -f 255 12 '转换为十六进制并补零';{} 13 '{0:d}' -f (Get-Date) 14 '{0:D}' -f (Get-

大话Python格式化输出字符串

1."{},{}".format(,)用法总结: '{0},{1}'.format('var1',132908) 'var1,132908' '{},{}'.format('var1',132908) 'var1,132908 '{0},{1},{1},{0}'.format('var1',132908) 'var1,132908,132908,var1' 2.关键字参数: '{name},{age}'.format(age=18,name='wangchao') 'wangchao,

python字符串格式化输出及相关操作代码举例

字符串的格式化 Python 支持格式化字符串的输出 .尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中.在   Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法. 在python中格式化输出字符串通用的形式为: 格式标记字符串 % 要输出的值组 其中,左边部分的"格式标记字符串"可以完全和c中的一致.右边的"值组"如果有两个及以上的值则需要用小括号括起来,中间用逗号隔开. 重点来看左

Python 学习笔记 -- 字符串格式化输出

1 #如何格式化输出字符串 2 print("{0}是一只{1}".format("我","猫")) 3 print("{a}是一只{b}".format(a="我",b="猫")) 4 print("{0:.1f}{1}".format(3.1415,"GB")) 5 6 #使用%格式化输出 7 print("%c %c %c"

Python之print 格式化输出

使用print输出各型的 字符串 整数 浮点数 出度及精度控制 strHello = 'Hello Python' print strHello #输出结果:Hello Python #直接出字符串 1.格式化输出整数 python print也支持参数格式化,与C言的printf似, strHello = "the length of (%s) is %d" %('Hello World',len('Hello World')) print strHello #输出果:the len

Python print函数用法,print 格式化输出

原文地址:http://blog.csdn.net/zanfeng/article/details/52164124 使用print输出各型的 字符串 整数 浮点数 出度及精度控制 strHello = 'Hello Python' print strHello #输出结果:Hello Python #直接出字符串 1.格式化输出整数 python print也支持参数格式化,与C言的printf似, strHello = "the length of (%s) is %d" %('H

变量和格式化输出

Python采用基于值的内存管理模式.赋值语句的执行过程是:首先把等号右侧表达式的值计算出来,然后在内存中寻找一个位置把值放进去,最后创建变量并指向这个内存地址.Python中的变量并不直接存储值,而是存储了值的内存地址或者引用,这也是变量类型随时可以改变的原因. 变量用于引用在程序中可能会变化的值. 1,变量 In [2]: name1='apple' In [3]: name2='apple' In [4]: id(name1) Out[4]: 1438115923984 In [5]: i

PHP 格式化字符串sprintf()

字符串函数 sprintf() 函数把格式化的字符串写入一个变量中 函数说明:sprintf(格式, 要转换的字符串)  参考PHP手册 返回: 格式化后的字符串 举例: 如:保留2位小数, $str = '99.9';echo sprintf('%01.2f', $str);结果为:99.90 echo round($str, 2); 结果为:99.9