【发布时间】:2013-06-08 13:09:03
【问题描述】:
我对 sprintf 感到很困惑,以至于不同平台的一个有趣问题。 代码:
int main ()
{
char sql[1024];
uint32_t app_id = 32;
uint64_t task_id = 64;
sprintf(sql, "%u, %u", task_id, app_id);
printf ("%s\n", sql);
return 0;
}
控制台中的结果(MSVC2010 调试/发布):64, 0
但控制台中的代码相同(CentOS64 gcc4.4.6):64, 32
任何人都会帮助我,tks!
-------------已更新--------------
谢谢各位。我看过这篇文章:sprintf for unsigned _int64
实际上,PRIu64 在"inttypes.h" 中定义为:I64uwindows 不支持。所以我可以这样写:
sprintf(sql, "%I64u, %I32u", task_id, app_id);
【问题讨论】:
-
%u不是uint64_t的正确格式说明符。请改用PRIu64。 -
在 windows 上,uint64_t 是 unsigned long long;如果您希望它全面正常工作,您需要坚持@simonc 的建议
-
#include <inttypes.h>和sprintf(sql, "%"PRIu64",%"PRIu32, task_id, app_id);可以解决问题 -
你添加的链接真的很好。