|
Der Stack und seine Rolle bei Format Strings
Das Verhalten der Format-Funktionen wird vom Format-String gesteuert.
Sie holt sich dabei die vom Format String gewünschten Parameter vom
Stack.
printf ("Zahl %d hat keine Adresse, Zahl %d schon: %08x\n", i, a, &a);
Stack:
- (hohe Adressen)
- . . .
- <&a>
- <a>
- <i>
- A
- . . .
- (niedrige Adressen)
wobei
- A = Adresse des Format Strings
- i = value von der Variable i
- a = value von der Variable a
- &a = Adresse der Variable a
Die format Funktion parsed den String bei A nun Zeichen für Zeichen,
und prüft ob das Zeichen ein '%' ist. Ist dies nicht der Fall,
so wird es einfach kopiert (in die Ausgabe oder den String),
sonst wird geprüft welches Zeichen hinter dem '%' steht, und der
Parameter dementsprechend ausgewertet. Jeder Parameter ausser
"%%" bezieht sich dabei auf einen Wert aus dem Stack.
|