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, orXconversion specifier applies to aptrdiff_tor the corresponding unsigned integer type argument; or that a followingnconversion specifier applies to a pointer to aptrdiff_targument.
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