Christian Kruse: C mal wieder, Länge einer Binary

Beitrag lesen

Hallo Robert,

abgesehen davon, dass %d die falsche Formatangabe für size_t ist!

Nein, es ist der richtige. Es fehlt nur der length modifier z:

Length modifier

Here, "integer conversion" stands for d, i, o, u, x, or X conversion. […]

  • z A following integer conversion corresponds to a size_t or ssize_t argument, or a following n conversion corresponds to a pointer to a size_t argument.

Das richtige Format für size_t ist "%zd" (bzw "%zx" wenn der Wert hexadezimal dargestellt werden soll).

Wie oft soll man dir das eigentlich noch erklären, bis du mal einen size_t hast, der $$\ge 2^{31}$$ ist?!

Ja, der length modifier z sollte wirklich nicht fehlen.

char c[] = "a";
printf("%lu %lu\n", sizeof c, strlen(c));
                       2         1

Dann auch eher so:

char c[] = "a";
printf("%zu %zu\n", sizeof c, strlen(c));

LG,
CK