问题1
C++程序测试:
aix环境下,
printf("aa--lenth[%010s]\n", "aa");
输入:
linux 环境下,
printf("aa--lenth[%010s]\n", "aa");
输出:
求解释?
问题2:sprintf 的源码在哪里能看到?
左补0 是为了在输出数字的时候替代空格的。当你使用%s 时,你的编译器会警告你
warning: flag '0' results in undefined behavior with 's' conversion specifier [-Wformat]
这个意思是会导致未定义的行为发生,这就是为什么在Linux上和在MacOs 上发生不一样的后果的原因。
而你将%s改成%d ,那么所有的环境下都会输出0而不是空格。
各位,别害羞,畅所欲言!
– 大树2016 6年前