sprintf很有趣

wel*_*lls 5 c linux windows printf

我对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;
}
Run Code Online (Sandbox Code Playgroud)

结果在控制台(MSVC2010调试/释放):64,0

但是,同样的代码在控制台(CentOS64 gcc4.4.6):64,32

任何人都会帮助我,tks!

- - - - - - -更新 - - - - - - - - - - - - -

多谢你们.我读过这篇文章:sprintf for unsigned _int64

实际上,PRIu64"inttypes.h"定义中:I64u在Windows上不支持.所以我可以这样写:

sprintf(sql, "%I64u, %I32u", task_id, app_id);
Run Code Online (Sandbox Code Playgroud)

Gri*_*han 9

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

sprintf(sql, "%llu, %u", task_id, app_id);
//             ^
//            for: long long unsigned int
Run Code Online (Sandbox Code Playgroud)

编辑:正如@ Simonc建议使用它更好:PRIu32并且(因为你有Linux标签)PRIu64定义的宏<inttypes.h>确实如下:

sprintf(sql, "%"PRIu64", %"PRIu32"", task_id, app_id);
//               ^           ^
//       for:   uint64_t    uint32_t  
Run Code Online (Sandbox Code Playgroud)