-->

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

2019-01-02 21:20发布

问题:

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

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

求解释?

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

回答1:

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

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

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

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



标签: