Bernhard Walle schrieb:
* Bernhard Walle
[2004-01-16 17:07]: * Bodo Kaelberer
[2004-01-16 16:33]: P.S: Woher weisst printf eigentlich, ob ich ein char, int oder sonstwas uebergebe? Also woher weiss es, dass es fuer die Darstellung nur auf ein Byte zugreifen muss, wo doch %d auch fuer ints verwendbar ist?
printf weiß es nicht. printf nimmt int an, da %d im Formatstring übergeben wurde.
Gar nicht. printf() bekommt keinen Zeiger sondern einen Wert. char wird einfach vor der Übergabe auf int erweitert.
Ja, s.u.
ich glaube ganz so einfach ist es doch nicht. Richtig sollte man %hd (short) oder %hhd (char) angeben.
Was sagen die Experten?
Bin zwar kein Experte, werde mich aber trotzdem mal dran versuchen... Falls die Adressgröße des Stack-Segmentes 32Bit ist, landen die Parameter, die an printf übergeben werden immer an 32Bit-Grenzen. Falls der Datentyp kleiner 32Bit ist, macht dies nichts aus, da die höherwertigen Bytes beim pushen auf den Stack auf Null gesetzt werden. Dies gilt auch für char. Auf dem Stack liegt damit sozusagen (int)buf[i], das %d funktioniert. -- Gruß, Alex