日期:2014-05-16  浏览次数:20660 次

系统移植,printf的问题.路过有分
手上有个移植工作

在代中使用例如   printf( "%04s ",   "abc ");

在Win   AIX   ScoUnix下均输出   "0abc "
在红帽Linux下输出   "   abc "

请问如何让Linux保持和Win   AIX   ScoUnix系统一致?

谢谢!

有牛人说   好像gcc有个编译开关的,谁知道?


------解决方案--------------------
只写符合ANSI标准的c代码.
------解决方案--------------------
跟编译器应该无关吧。编译器最多给个warning。应该是libc的问题。

man printf

0 The value should be zero padded. For d, i, o, u, x, X, a, A,
e, E, f, F, g, and G conversions, the converted value is
padded on the left with zeros rather than blanks. If the 0
and - flags both appear, the 0 flag is ignored. If a preci-
sion is given with a numeric conversion (d, i, o, u, x, and
X), the 0 flag is ignored. For other conversions, the behav-
ior is undefined.

没有对s的支持。最好的方法,别用%0s. 大不了用sprintf打印到buffer里改把改把再打。
------解决方案--------------------
http://blog.tianya.cn/blogger/post_show.asp?idWriter=0&Key=0&BlogID=462085&PostID=8363874


看看上面这个对你有帮助不?
------解决方案--------------------
俺仅仅路过,能不能用最土的预编译解决呀
#ifdef
#else
#endif
------解决方案--------------------
应该可以用sprintf到buffer中,再进行输出
------解决方案--------------------
你写的复杂了。最简单的方法,就用%s打印到buffer里。strlen比较,前面的补0.
还有为什么前面一定要是0, 用 "%4s "前面补空格不一样的马?

还有谁说的#ifdef预编译最土? 有什么“不土“的方法可以替代#ifdef?