我对sprintf感到非常困惑,以至于不同的platfrom出现了一个有趣的问题。代码:
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!
- - - - - - -更新 - - - - - - - - - - - - -
实际上,PRIu64在"inttypes.h"indefined中:I64uWindows不支持。所以我可以这样写:
PRIu64
"inttypes.h"
I64u
sprintf(sql, "%I64u, %I32u", task_id, app_id);
使用%llu格式字符串task_id中sprintf(),如下所示:
%llu
task_id
sprintf()
sprintf(sql, "%llu, %u", task_id, app_id); // ^ // for: long long unsigned int
编辑:@ @Simonc建议更好地使用:PRIu32和(由于具有Linux标记)中PRIu64定义的宏<inttypes.h>类似:
PRIu32
<inttypes.h>
sprintf(sql, "%"PRIu64", %"PRIu32"", task_id, app_id); // ^ ^ // for: uint64_t uint32_t