c - printf 格式字符串最大宽度值(填充)%(??)d%n
问题描述
我可以在%d
格式说明符中输入的最大宽度值是多少?例如:
int c=0;
printf("%1234567899d%n",0,&c);
printf("%d",c);
当我使用大值时,写入的c
值为0
。这是为什么?
解决方案
虽然没有明确说明,但字段宽度的类型很可能是int
. 这是因为如果给定字段宽度,*
则需要一个int
参数。
C 标准的第 7.21.6.1p5 节关于fprintf
函数(任何扩展名printf
)说明了关于字段 witdh 的以下内容:
如上所述,字段宽度或精度或两者都可以由星号指示。在这种情况下,
int
参数提供字段宽度或精度。指定字段宽度或精度或两者的参数应(按该顺序)出现在要转换的参数(如果有)之前。负字段宽度参数被视为-
标志,后跟正字段宽度。采用负精度参数,就好像省略了精度一样。
我在 CentOS 7 和 Ubuntu 18 上对此进行了测试,我可以指定的最大宽度是 2147483614,它比有符号 32 位的最大值小 33 int
。如果我使用任何更大的东西,第一个printf
不打印任何内容并c
保持为 0。
一般来说,您可以期望的最大值c
是INT_MAX
,但是确切的值会因实现而异。
推荐阅读
- automation - 使用 Pipedream,我如何从 HTTP 触发器中获取名称和内容标签?
- vue.js - 从 vue.js json 父组件继承子组件
- javascript - React Native - 使用 Expo Audio 在录制声音的同时播放声音
- javascript - vue-cli 使用官方 pwa 插件创建的网站在离线模式下不起作用
- php - laravel + mssql 应用推荐的服务器规范
- python - 为什么我在训练数据时会收到此错误?
- node.js - 中间件不起作用,尽管给出了下一个语句
- python - 如何使用 SymPy 求解两个变量方程以使其依赖于一个变量?
- python - 在 pandas 中插入数据
- python - 获取单个模型的多个查询集列表