c printf size_t

Mein code kompiliert werden, obwohl die printf keine Anzeige mehr?

Wenn ich den formatter Teil der printf dann funktioniert es Prima.

#include <stdio.h>

size_t MyStrlen(const char *s1)
{
    const char *s1Copy = s1;

    while (*s1)
    {
        *s1Copy++;
    }

    return s1Copy -s1;
}

int main(void) 
{
    const char str[] = "HELLO";

    printf("Length: %d \n", (unsigned int)MyStrlen(str));

    return 0;
}
  • Ich denke, mit %u ohne cast das Ergebnis ist in Ordnung.
  • Nicht wirklich,, das wird brechen, wenn size_t und unsigned sind nicht die gleiche Größe.
  • Oh, duh, rechts. Die %u halten sollte, obwohl.
  • Darüber hinaus *s1Copy++ ist eine Verschwendung - da gibt es keine Notwendigkeit, Sie zu dereferenzieren, verwenden Sie einfach s1Copy++. Und der richtige Weg (seit C99) zum drucken einer size_t ist die Verwendung der z Länge modifier wie mit "%zd". size_t und die int-Klasse-Typen können ganz unterschiedliche breiten. Und ich werde nicht einmal zu Fragen beginnen, was Sie denken, ist falsch mit der stdlib strlen erfordern würde, dass Sie schreiben, Sie eigene 🙂
  • Bitte ändern Sie nicht die Fragen zu dem Punkt, wo die Antworten werden völlig ungültig - das macht das gesamte Q&A nutzlos. Wenn Sie beheben die Schritte problem und es gibt ein anderes Problem, eine andere Frage stellen.
  • Hoppla, ich rollte mich wieder auf die falsche version. Es sollte jetzt ok sein (d.h., die Frage enthält nun das problem, dass pb2q Antwort erklärt). Jason, pb2q Antwort, sagt "In deinem loop-test werden Sie wollen, um zu testen *s1Copy für nicht-NULL, nicht *s1, die man nicht Inkrementieren." Das ist die einzige Sache, die Sie wirklich brauchen, um zu beheben.

InformationsquelleAutor blitzeus | 2012-07-24
Schreibe einen Kommentar