当前位置:网站首页 > 技术博客 > 正文

输出格式化字符的基本形式



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

 

buffer:char型指针,指向将要写入的字符串的缓冲区。 
format:格式化字符串。 
[argument]…:可选参数,可以是任何类型的数据。 

      字符串长度(strlen),打印到buffer中的字符数目 

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

 

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

char str[10] = {0};

//可以指定宽度,不足的左边补空格:
sprintf(str, "%8d%8d", 123, 4567); //输出:"_"

//当然也可以左对齐:
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 位数字,比如: 
 
需要控制打印的宽度和小数位数时,使用:”%m.nf“格式。(m表示打印的宽度,n表示小数点后的位数。)

sprintf(s, "%10.3f", 3.); //输出:" 3.142"
sprintf(s, "%-10.3f", 3.); //输出:"3.142 "
sprintf(s, "%.3f", 3.); //不指定总宽度,输出:"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, "%-*d", 4, ‘A‘); //输出:"65 "
sprintf(s, "%#0*X", 8, 128); //输出:"0X000080","#"产生0X
sprintf(s, "%*.*f", 10, 2, 3.); //输出:" 3.14"

 

四:打印地址信息

调试程序时,想查看某些变量或者成员的地址。由于地址或者指针也不过是个32 位的数,可以用打印无符号整数的”꽿#xff1a; 
 
用16 进制显示地址: 
 
地址打印,sprintf 提供了专门的”%p”: 
 
≈ 

  • 上一篇: linux移植步骤
  • 下一篇: 思科模拟器配置vlan
  • 版权声明


    相关文章:

  • linux移植步骤2024-11-08 19:01:01
  • 数学建模预测模型有哪些2024-11-08 19:01:01
  • seekbar的使用android2024-11-08 19:01:01
  • chrome打断点调试2024-11-08 19:01:01
  • css字体设置为宋体2024-11-08 19:01:01
  • 思科模拟器配置vlan2024-11-08 19:01:01
  • java数据库员工管理系统2024-11-08 19:01:01
  • fork 函数2024-11-08 19:01:01
  • wordpress如何防止被采集2024-11-08 19:01:01
  • linux桌面软件有哪些2024-11-08 19:01:01