我对 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
任何人都会帮助我,谢谢!
------------已更新------------------------
谢谢大家。我读过这篇文章:sprintf for unsigned _int64
实际上,"inttypes.h"
中的PRIu64
定义:I64u
,Windows 不支持。所以我可以这样写:
sprintf(sql, "%I64u, %I32u", task_id, app_id);
最佳答案
使用 %llu
task_id
的格式字符串在 sprintf()
如下:
sprintf(sql, "%llu, %u", task_id, app_id);
// ^
// for: long long unsigned int
编辑:@ Simonc建议最好使用:PRIu32
和 PRIu64
<inttypes.h>
中定义的宏(因为你有 Linux 标签)喜欢:
sprintf(sql, "%"PRIu64", %"PRIu32"", task_id, app_id);
// ^ ^
// for: uint64_t uint32_t
关于c - sprintf 的一件有趣的事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17065203/