Stefan Weil schrieb: > Michael S. Tsirkin schrieb: >> On Sun, Jan 24, 2010 at 09:23:41PM +0000, Herve Poussineau wrote: >>> Replace %lld occurrences by PRId64. >> This is wrong. >> long long values should be printed with %lld. >> size_t - with %zd. PRId64 is for int64_t. >> > > size_t => %zu, ssize_t => %zd might be better. > > And none of them works on win32, so using them > there can result in a crash: > > size_t st = 4711; > fprintf(stderr, "st=%zu, %s\n", st, "test"); > > printf functions on win32 don't know %z. > They run > > fprintf(stderr, "st=zu, %s\n", st, "test"); > > which results in an memory access fault when printf > wants to read the memory at address 0x4711. > > Regards, > Stefan Weil > >
Hi, I just read this which could explain crashes with %lld: /* MSVCRT supports additional length specifiers for "printf". (In fact, it does not support some of the C99 specifiers, like "ll". However, we do not presently have a mechanism for disabling a specifier.) */ A short test: long long ll = 0; printf("ll=%lld, string=%s\n", ll, "test"); ll=0, string=(null) => You can crash QEMU for win32 with %lld. Regards, Stefan