printf() rückwärst :P
-
Ich habe eben festgestellt das printf(); seine parameter rückwärts durcharbeitet. als beispiel:
eine textdatei mit dem inhalt "123".
version1:
#include <stdio.h> #include <stdlib.h> void main() { FILE *fp = fopen("C:\\test.txt", "r"); char i[3]; i[0]=fgetc(fp); i[1]=fgetc(fp); i[2]=fgetc(fp); printf("%c%c%c\n", i[0], i[1], i[2]); fcloseall(); }
ausgabe : "123"
version2:
#include <stdio.h> #include <stdlib.h> void main() { FILE *fp = fopen("C:\\test.txt", "r"); printf("%c%c%c\n", fgetc(fp), fgetc(fp), fgetc(fp)); fcloseall(); }
ausgabe: "321"
das ist irgendwie verwirrend... und ich hab mich gewundert wieso der rückwärts einliest... seit dem arbeite ich mit cout
[ Dieser Beitrag wurde am 30.03.2003 um 01:57 Uhr von Fabian Bernecker editiert. ]
-
und ich hab mich gewundert wieso der rückwärts einliest... seit dem arbeite ich mit cout
Was dir aber überhaupt nichts nützt, da das Verhalten bei cout *exakt* genauso *implementation-defined* ist wie bei printf auch.
Die Reihenfolge in der Funktionsargumente ausgewertet werden ist *nicht* definiert. Es muss lediglich jedes Argument ausgewertet sein *bevor* die erste Anweisung der Funktion ausgeführt wird.
Der Aufruf:
printf("%c%c%c\n", fgetc(fp), fgetc(fp), fgetc(fp));
kann zur Ausgabe jeder beliebigen Permutation von 1,2,3 führen. Und wenn der Compilerhersteller will sogar jedesmal zu einer anderen.
Für:
cout << fgetc(fp) << fgetc(fp) << fgetc(fp);
gilt exakt das selbe.
[ Dieser Beitrag wurde am 30.03.2003 um 08:43 Uhr von HumeSikkins editiert. ]
-
Schade
Ich hatte gedacht das das Problem damit behoben ist. Aber ich werd mir das auf jeden Fall merken und in Zukunft drauf achten. Danke für die Info