C: Welches Zeichen soll für ptrdiff_t in printf verwendet werden?

Lesezeit: 2 Minuten

Benutzeravatar von Amir Saniyan
Amir Saniyan

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?

Es ist %td. Sehen hier.

  • Diese Referenz scheint nicht vollständig zu sein; das t Zeichen ist ein Längenmodifikator von d Typbezeichner. Ich würde auch vorschlagen, dass Sie Visual Studio in Ihrer Frage angeben, wenn dies die Plattform ist, an der Sie interessiert sind.

    – Trojaner

    31. Oktober 2011 um 13:45 Uhr

  • %td ist Standard. Der C-Compiler von Visual Studio entspricht nicht dem aktuellen C-Standard.

    – CB Bailey

    31. Oktober 2011 um 13:46 Uhr

  • @AmirSaniyan: Die t ist ein Größenbezeichner, kein Typ (der Typ ist d hier). Offenbar I sollte als Größenbezeichner für verwendet werden ptrdiff_t mit der Microsoft-Implementierung (so %Id), was kein Standard ist.

    – Café

    31. Oktober 2011 um 13:47 Uhr

  • @AmirSaniyan: Nein. %td ist völlig Standard (§7.19.6.1, Absatz 7). Da Microsoft eigentlich keinen C-Compiler bereitstellt, hat das Verhalten von VS nichts damit zu tun, was Standard ist oder nicht.

    – Stefan Kanon

    31. Oktober 2011 um 13:49 Uhr


  • Visual Studio 2015 unterstützt beides %zu und %td (nicht richtig auf MSDN dokumentiert, aber beide Tests sind OK).

    – vladr

    18. Dezember 2017 um 21:34 Uhr

chux – Stellt Monicas Benutzeravatar wieder her
Chux – Wiedereinsetzung von Monica

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, xoder 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

Benutzeravatar von masoud
masud

Verwenden %td und wenn Ihr Compiler es nicht unterstützt, sollten Sie es versuchen %ld (caste auch die Eingabe in long).

1387250cookie-checkC: Welches Zeichen soll für ptrdiff_t in printf verwendet werden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy