小编典典

sprintf的有趣之处

linux

我对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不支持。所以我可以这样写:

sprintf(sql, "%I64u, %I32u", task_id, app_id);

阅读 387

收藏
2020-06-07

共1个答案

小编典典

使用%llu格式字符串task_idsprintf(),如下所示:

sprintf(sql, "%llu, %u", task_id, app_id);
//             ^
//            for: long long unsigned int

编辑:@ @Simonc建议更好地使用:PRIu32和(由于具有Linux标记)中PRIu64定义的宏<inttypes.h>类似:

sprintf(sql, "%"PRIu64", %"PRIu32"", task_id, app_id);
//               ^           ^
//       for:   uint64_t    uint32_t
2020-06-07