Hallo Robert,
abgesehen davon, dass
%d
die falsche Formatangabe fürsize_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