Welches Zeichen soll verwendet werden ptrdiff_t
in printf
?
Erklärt der C-Standard deutlich, wie man druckt ptrdiff_t
in printf
? Ich habe niemanden gefunden.
int a = 1;
int b = 2;
int* pa = &a;
int* pb = &b;
ptrdiff_t diff = b - a;
printf("diff = %?", diff); // % what?
C11-Entwurf erklärt den Längenmodifikator für ptrdiff_t
in 7.21.6.1 7 “Die fprintf
Funktion”
t
Gibt an, dass eine folgende d
, i
, o
, u
, x
oder X
Konvertierungsspezifizierer gilt für a ptrdiff_t
oder das entsprechende Argument vom Typ Ganzzahl ohne Vorzeichen; oder dass ein folgendes n
Konvertierungsbezeichner gilt für einen Zeiger auf a ptrdiff_t
Streit.
Verwenden "%td"
wie im Folgenden: Credit: @trojanfoe
ptrdiff_t diff = b - a;
printf("diff = %td", diff);
Wenn der Compiler das tut nicht unterstützt "%td"
, in einen signierten Typ gegossen – je länger, desto besser. Stellen Sie dann sicher, dass das alternative Format und das Argument übereinstimmen.
// Note the cast
printf("diff = %lld", (long long) diff); // or
printf("diff = %ld", (long) diff);
Ref Formatbezeichner
Verwenden %td
und wenn Ihr Compiler es nicht unterstützt, sollten Sie es versuchen %ld
(caste auch die Eingabe in long
).