首页 新闻 会员 周边

sprintf 字符串 的左补零问题,高手请进!

0
[已解决问题] 解决于 2018-11-21 10:08

问题1
C++程序测试:
aix环境下,
printf("aa--lenth[%010s]\n", "aa");
输入:

linux 环境下,
printf("aa--lenth[%010s]\n", "aa");
输出:

求解释?

问题2:sprintf 的源码在哪里能看到?

大树2016的主页 大树2016 | 菜鸟二级 | 园豆:213
提问于:2018-11-20 10:51

各位,别害羞,畅所欲言!

大树2016 5年前
< >
分享
最佳答案
0

左补0 是为了在输出数字的时候替代空格的。当你使用%s 时,你的编译器会警告你

warning: flag '0' results in undefined behavior with 's' conversion specifier [-Wformat]

这个意思是会导致未定义的行为发生,这就是为什么在Linux上和在MacOs 上发生不一样的后果的原因。

而你将%s改成%d ,那么所有的环境下都会输出0而不是空格。

奖励园豆:5
Shendu.CC | 老鸟四级 |园豆:2138 | 2018-11-20 14:34
Shendu.CC | 园豆:2138 (老鸟四级) | 2018-11-20 14:39

@Shendu.CC: 大神回答的真好!点赞!

古宇 | 园豆:476 (菜鸟二级) | 2018-11-20 16:14

感谢感谢!

大树2016 | 园豆:213 (菜鸟二级) | 2018-11-21 09:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册