文章目录

  • C中的格式化字符串
    • 格式化字符串
    • 以printf为代表的一类格式化字符串
      • Parameter
      • flags
      • field width
      • Precision
      • Length
      • 类型

C中的格式化字符串

​ 从官方文档中copy过来的,当作一个记录方便查阅

格式化字符串

​ 格式化字符串(format string)是一些程序设计语言的输入/输出库中能将字符串参数转换为另一种形式输出的函数。例如C、C++等程序设计语言的printf类函数,其中的转换说明(conversion specification)用于把随后对应的0个或多个函数参数转换为相应的格式输出;格式化字符串中转换说明以外的其它字符原样输出

以printf为代表的一类格式化字符串

​ 格式化字符串通过使用占位符来指出说明输出的参数是如何格式化的,他的基本格式如下:

%[parameter][flags][field width][.precision][length]type

Parameter

字符 描述
n$ n是用这个格式说明符(specifier)显示第几个参数;这使得参数可以输出多次,使用多个格式说明符,以不同的顺序输出。 注意:如果任意一个占位符使用了parameter,则其他所有占位符必须也使用parameter;

注意:格式化字符串也算作一个参数

#include<stdio.h>int main(){printf("%2$d %2$#x %1$d %1$#x", 15, 16);return 1;
}

flags

字符 描述
+ 总是表示有符号数值的’+‘或’-'号,缺省情况是忽略正数的符号。仅适用于数值类型
SPACE 使得有符号数的输出如果没有正负号或者输出0个字符,则前缀1个空格。如果空格与’+'同时出现,则空格说明符被忽略
- 左对齐,缺省情况下是右对齐
# 对于’g’与’G’,不删除尾部0以表示精度。对于’f’, ‘F’, ‘e’, ‘E’, ‘g’, ‘G’, 总是输出小数点。对于’o’, ‘x’, ‘X’, 在非0数值前分别输出前缀0, 0x, and 0X表示数制
0 如果width选项前缀以0,则在左侧用0填充直至达到宽度要求

field width

​ 给出显示数值的最小宽度,典型用于制表输出时填充固定宽度的表目。

​ 实际输出字符的个数不足域宽,则根据左对齐或右对齐进行填充(实际长度小于格式化长度)

​ 实际输出字符的个数超过域宽并不引起数值截断,而是显示全部宽度值(实际长度大于等于格式化长度)

Precision

​ 通常指明输出的最大长度,依赖于特定的格式化类型

Length

​ 指出浮点型参数或整型参数的长度:

字符 描述
hh 对于整数类型,printf期待一个从char提升的int尺寸的整型参数
h 对于整数类型,printf期待一个从short提升的int尺寸的整型参数
l 对于整数类型,printf期待一个long尺寸的整型参数;对于浮点类型,printf期待一个double尺寸的整型参数;对于字符串s类型,printf期待一个wchar_t指针参数;对于字符c类型,printf期待一个wint_t型的参数
ll 对于整数类型,printf期待一个long long尺寸的整型参数。Microsoft也可以使用I64
L 对于浮点类型,printf期待一个long double尺寸的整型参数
z 对于整数类型,printf期待一个size_t尺寸的整型参数
j 对于整数类型,printf期待一个intmax_t尺寸的整型参数
t 对于整数类型,printf期待一个ptrdiff_t尺寸的整型参数

类型

​ Type,也称转换说明(conversion specification/specifier)

字符 描述
d, i 有符号十进制数值int。‘%d’与’%i’对于输出是同义;但对于scanf()输入二者不同,其中%i在输入值有前缀0x或0时,分别表示16进制或8进制的值。如果指定了精度,则输出的数字不足时在左侧补0。默认精度为1。精度为0且值为0,则输出为空
u 十进制unsigned int。如果指定了精度,则输出的数字不足时在左侧补0。默认精度为1。精度为0且值为0,则输出为空
f, F double型输出10进制定点表示。'f’与’F’差异是表示无穷与NaN时,‘f’输出’inf’, ‘infinity’与’nan’;‘F’输出’INF’, ‘INFINITY’与’NAN’。小数点后的数字位数等于精度,最后一位数字四舍五入。精度默认为6。如果精度为0且没有#标记,则不出现小数点。小数点左侧至少一位数字
e, E doubleE版本使用的指数符号为E(而不是e)。指数部分至少包含2位数字,如果值为0,则指数部分为00。Windows系统,指数部分至少为3位数字,例如1.5e002
g, G double型数值,精度定义为全部有效数字位数
x, X 16进制unsigned int。'x’使用小写字母;'X’使用大写字母
o 8进制unsigned int
s 如果没有用l标志,输出null结尾字符串直到精度规定的上限;如果没有指定精度,则输出所有字节。如果用了l标志,则对应函数参数指向wchar_t型的数组,输出时把每个宽字符转化为多字节字符,相当于调用wcrtomb函数。
c 如果没有用l标志,把int参数转为unsigned char型输出;如果用了l标志,把wint_t参数转为包含两个元素的wchart_t数组,其中第一个元素包含要输出的字符,第二个元素为null宽字符。
p void *
a, A double型的16进制表示
n 不输出字符,但是把已经成功输出的字符个数写入对应的整型指针参数所指的变量。
% %字面值,不接受任何flags, width, precision or length

​ 炒一下冷饭:

​ 在格式化字符串中 % 是存在特别意义的,我们要打印百分号必须使用2个 % 才能在控制台上打印出一个 %

​ 在格式化字符串中 / 常用来表示转义字符,我们需要打印反斜杠的话必须使用两个反斜杠打印

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oevF5sTq-1659951255467)(E:\newStart\PWN\image-20220808172945215.png)]

台上打印出一个 %

​ 在格式化字符串中 / 常用来表示转义字符,我们需要打印反斜杠的话必须使用两个反斜杠打印

详情请阅文档

[二进制学习笔记]C中的格式化字符串相关推荐

  1. Java学习笔记(七)--格式化字符串及格式输出

    一.格式化字符串 String 类的静态 format() 方法用于创建格式化的字符串. 1.format(String format, Object···args) 该方法使用指定的格式字符串和参数 ...

  2. python中格式化字符串的使用_Python中的格式化字符串

    Python中的格式化字符串方法: 在学习了一段时间的Python之后,回过头来看书的时候,发现Python中最简单的关于格式化输出字符串的方法也有多种,而这并不是类似于茴香豆的"茴&quo ...

  3. r语言c函数怎么用,R语言学习笔记——C#中如何使用R语言setwd()函数

    在R语言编译器中,设置当前工作文件夹可以用setwd()函数. > setwd("e://桌面//") > setwd("e:\桌面\") > ...

  4. c#学习笔记05-treeview中添加图标

    创建树目录前面在学习笔记03中已经提到过 即树目录数据从XML文档中获取 添加图标主要用到ImageList控件 1.ImageList控件 在树目录对应存在的窗体中添加此控件 添加图标: 2.tre ...

  5. 20190328学习笔记 - JSP 中的 tag 文件

    20190328学习笔记 - JSP 中的 tag 文件 对于tag 文件 1. 引入 tag 文件 2. 在/WEB-INF/tags/sys 下,新增一个gridselect.tag文件 3. 在 ...

  6. Objective-C学习笔记2013[NSString]字符串[可变字符串中,加用app减用delete]

    Objective-C学习笔记 小常识: NS是Cocoa类对象类型的前缀,来源于史蒂夫-乔布斯被苹果开除那段时间建立的公司NeXT. @是Cocoa元素的前缀,很多地方我们会看到,比如接下来... ...

  7. Web开发学习笔记:ngIf中使用方法判断字符串中是否包含子字符串

    <p *ngFor="let item of UseTypes"><ion-select-option *ngIf="globalVariable.is ...

  8. 零基础入门学习Python(14)-格式化字符串

    什么是格式化字符串 格式化字符串就是按照统一的规格去输出一个字符串,如果规格不统一,就很可能造成误会 format()方法 接受位置参数和关键字参数两种参数 二者均传递到一个replacement的字 ...

  9. tornado学习笔记day08-tornado中的异步

    概述 应为epoll主要用来解决网络的并发问题,所以tornado中的异步也是主要体现在网络的IO异步上,即异步web请求 tornado.httpclient.AsyncHTTPClient tor ...

最新文章

  1. skiller v3 beta2_S10全球总决赛:赛前叫嚣却遭打脸!V3被LGD踢出S10,日本撸友彻底炸锅:真是悲哀...
  2. java中为什么不能通过getClass().getName()获取父类的类名
  3. 推荐11个构建和测试API的顶级工具
  4. AI:2020年6月21日北京智源大会演讲分享之09:40Judea教授《 The New Science of Cause and Effect with reflections ondata s》
  5. saber 2012安装教程
  6. 唯一标识 微信小程序_微信小程序获取用户唯一标识(不用授权)
  7. update,options
  8. centos识别移动硬盘U盘,需安装【ntfs-3g】
  9. ORACLE利用scn赚钱,在Oracle中增进SCN及案例介绍
  10. pass 软件_杀毒软件哪家强?今天来聊聊关于保护你电脑的杀毒软件那些事!
  11. 数据库系统概念 第四章 习题答案
  12. Weblogic10.3.6反序列化漏洞补丁更新
  13. 正好股票资讯大盘平衡被打破
  14. 重要发布全总结丨一文看懂阿里云弹性计算年度峰会
  15. cad用计算机怎么计算坐标,CAD坐标怎样计算
  16. 基于CM6800的ATX电源维修
  17. Mac OS X Safari 插件存放位置
  18. 为精简版VS2008添加DEBUG版运行时库到系统目录
  19. Structured Streaming系列-5、物联网设备数据分析
  20. 单身程序狗解决了一个技术难题后,没有妹子可以炫耀,怎么办?

热门文章

  1. spring 定时任务@Scheduled详解
  2. oppor15android版本8.1,OPPO R15体验:基于安卓8.1,ColorOS 5.0更好用
  3. 戴尔计算机的机械硬盘容量,808.8GB机械盘、240G固态硬盘,为什么电脑硬盘容量不是整数?...
  4. ORACLE 备份恢复之RMAN详解
  5. 机票名字错乘客损失1600元:预订务必核准信息
  6. mysql数据库创建快递_Mysql索引
  7. app android 遥控,第十二章 遥控机器人 《App Inventor--创建自己的安卓应用》
  8. Ubuntu 16.04 LTS 一键安装NVIDIA显卡驱动
  9. 拼团系统设计熊猫拼U拼拼团产品设计思路
  10. SIP 中的Dialog,call,session 和 transaction