Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: "%zd"?

0 views
Skip to first unread message
Message has been deleted

Thomas Richter

unread,
Dec 5, 2009, 7:47:56 AM12/5/09
to
Stefan Ram wrote:
> size_t (stddef.h oder stdio.h) ist wohl immer vorzeichenlos.
> Demnach w�re die Umwandlungsspezifikation f�r fprintf immer
> "%zu", wann w�rde man also "%zd" benutzen?

F�r ssize_t, was allerdings AFAIK nicht in ANSI-C definiert wird.

Gr��e,
Thomas

Thomas Koller

unread,
Dec 5, 2009, 8:05:26 AM12/5/09
to
Stefan Ram <r...@zedat.fu-berlin.de> wrote:
> size_t (stddef.h oder stdio.h) ist wohl immer vorzeichenlos.
> Demnach w�re die Umwandlungsspezifikation f�r fprintf immer
> "%zu", wann w�rde man also "%zd" benutzen?

Sowas wird man in der Praxis wohl recht selten einsetzen, um es mal
milde auszudr�cken. Eventuell k�nnte man sich noch denken, dass man
es zur Ausgabe des R�ckgabewertes einiger Funktionen der
Standardbibliothek verwendet, die beispielsweise (size_t)(-1)
als Ergebnis liefern k�nnen.

Tom

Jan Seiffert

unread,
Dec 5, 2009, 8:25:47 AM12/5/09
to
Stefan Ram schrieb:

> size_t (stddef.h oder stdio.h) ist wohl immer vorzeichenlos.
> Demnach wäre die Umwandlungsspezifikation für fprintf immer
> "%zu", wann würde man also "%zd" benutzen?
>

z ist ein "length modifier", er sagt der var arg Funktion wie gross der Typ ist
der da jetzt kommt (damit sie weiss wieviel sie da vom Stack holen muss),
genauso wie j. Wenn sie das nicht weiss, kann es zu problemen kommen (ein
Pointer fuer ein %s weiter hinten wird von der falschen Stelle geladen und boom).
z ist kein conversion specifier wie i, d, u, s, c, etc...

Ob du ein size_t mit %d drucken kannst, ist natuerlich von C nicht so richtig
festgelegt (aber auf einer gewohnlichen 2er Komplement Architektur sieht es
einfach Bloed aus wenn Groessen >= 2GiB negativ dargestellt werden).

Gruss
Jan

--
Fachbegriffe der Informatik:
360: Mann-Monat
Die dämliche Idee, man schaffe es, ein Baby nach 4 1/2 Monaten zu kriegen,
indem man einfach zwei Frauen schwängert. (Vinzent Hoefler)

Thomas Koller

unread,
Dec 5, 2009, 8:49:36 AM12/5/09
to
Jan Seiffert <nomail@invalid> wrote:
> Stefan Ram schrieb:
>> size_t (stddef.h oder stdio.h) ist wohl immer vorzeichenlos.
>> Demnach w�re die Umwandlungsspezifikation f�r fprintf immer
>> "%zu", wann w�rde man also "%zd" benutzen?

>>
>
> z ist ein "length modifier", er sagt der var arg Funktion wie gross der Typ ist
> der da jetzt kommt (damit sie weiss wieviel sie da vom Stack holen muss),
> genauso wie j. Wenn sie das nicht weiss, kann es zu problemen kommen (ein
> Pointer fuer ein %s weiter hinten wird von der falschen Stelle geladen und boom).
> z ist kein conversion specifier wie i, d, u, s, c, etc...
>
> Ob du ein size_t mit %d drucken kannst, ist natuerlich von C nicht so richtig
> festgelegt (aber auf einer gewohnlichen 2er Komplement Architektur sieht es
> einfach Bloed aus wenn Groessen >= 2GiB negativ dargestellt werden).

Du hast da anscheinend schlampig gelesen, er hat nicht nach %d gefragt,
sondern nach %zd.

Tom

Claus Reibenstein

unread,
Dec 5, 2009, 11:20:17 AM12/5/09
to
Stefan Ram schrieb:

> size_t (stddef.h oder stdio.h) ist wohl immer vorzeichenlos.
> Demnach w�re die Umwandlungsspezifikation f�r fprintf immer
> "%zu"

Oder "%zo" oder "%zx"

> wann w�rde man also "%zd" benutzen?

Gar nicht.

Gru�. Claus

0 new messages