问题描述
我跟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: I64u
which 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的一个有趣的事情的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!