Which character should be used for ptrdiff_t
in printf
?
Does C standard clearly explains how to print ptrdiff_t
in printf
? I haven't found any one.
int a = 1; int b = 2; int* pa = &a; int* pb = &b; ptrdiff_t diff = b - a; printf("diff = %?", diff); // % what?
As % has special meaning in printf type functions, to print the literal %, you type %% to prevent it from being interpreted as starting a conversion fmt.
It's %td
. See here.
C11 draft explains the length modifier for ptrdiff_t
in 7.21.6.1 7 "The fprintf
function"
t
Specifies that a followingd
,i
,o
,u
,x
, orX
conversion specifier applies to aptrdiff_t
or the corresponding unsigned integer type argument; or that a followingn
conversion specifier applies to a pointer to aptrdiff_t
argument.
Use "%td"
as in the following: Credit: @trojanfoe
ptrdiff_t diff = b - a; printf("diff = %td", diff);
If the compiler does not support "%td"
, cast to a signed type - the longer, the better. Then insure the alternative format and argument match.
// Note the cast printf("diff = %lld", (long long) diff); // or printf("diff = %ld", (long) diff);
Ref format specifiers
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With