A funny thing with sprintf
c, linux, printf, windows
Solution
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
Problem
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); ```