与sprintf的一个有趣的事情

与sprintf的一个有趣的事情

本文介绍了与sprintf的一个有趣的事情的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我跟sprintf的如此混乱的一个有趣的问题,不同的洗车台。
code:

  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);
    返回0;
}

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

但同样code控制台(CentOS64 gcc4.4.6): 64,32

任何人会帮我,TKS!

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

谢谢你们。我读这篇文章:

其实, PRIu64 inttypes.h定义: I64u 这是不支持Windows。所以,我可以写这样的:

 的sprintf(SQL,%I64u,%I32u,TASK_ID,APP_ID);


解决方案

使用%LLU 格式字符串 TASK_ID 的sprintf()如下:

 的sprintf(SQL,%LLU,%U,TASK_ID,APP_ID);
// ^
//为:长长的无符号整数

编辑:@ 建议其更好地利用: PRIu32 PRIu64 中定义的宏< inttypes.h> (你有Linux的标签)不喜欢:

 的sprintf(SQL,%PRIu64%PRIu32,TASK_ID,APP_ID);
// ^^
//为:uint64_t中uint32_t的

I'm so confused with sprintf that a funny problem with different platfrom.Code :

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;
}

The result in console (MSVC2010 debug/release): 64, 0

But the same code in console(CentOS64 gcc4.4.6): 64, 32

Any guy will help me, tks!

-------------updated--------------------------

Thanks guys. I have read this article: sprintf for unsigned _int64

Actually, PRIu64 in "inttypes.h" defined: I64uwhich is not supported on windows. So I can write like this:

sprintf(sql, "%I64u, %I32u", task_id, app_id);
解决方案

Use %llu format string for task_id in sprintf()as follows:

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

Edit: As @Simonc suggested its better to use: PRIu32 and PRIu64 macros defined in <inttypes.h> (as you have Linux tag) do like:

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

这篇关于与sprintf的一个有趣的事情的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-13 16:09