Geht beim casten c=getchar() mit char c Information verloren?



  • Hallo,

    ich frage mich, ob bei

    ...
    char c;
    
    c=getchar();
    ...
    

    Information verloren (Typecasting) gehen kann, da int>char ist?

    MfG



  • klaro



  • Du kannst dann von deinen Rückgabewert nicht mehr eindeutig auf ein EOF (0xFFFFFFFF) oder auf das Zeichen 0x000000FF schließen, da du in beiden Fällen nur noch ein 0xFF bekommst.
    Wichtig wird dies insbesondere wenn man binäre Dateien byteweise einließt, man müsste sonst nach jedem Zeichen einen Extraaufruf (feof) durchführen um das Dateiende zu erkennen.



  • Das muss man strenggenommen sowieso, denn keiner garantiert einem, dass sizeof(int) > sizeof(char).



  • SG1 schrieb:

    Das muss man strenggenommen sowieso, denn keiner garantiert einem, dass sizeof(int) > sizeof(char).

    ,

    ja, aber EOF ist eben eine int-Konstante, und getchar liefert ebenso ein int zurück. Deshalb schreiben z.b. die Man-Pages, man sollte stets ints nehmen, wenn man getchar & co. arbeitet.



  • SG1 schrieb:

    Das muss man strenggenommen sowieso, denn keiner garantiert einem, dass sizeof(int) > sizeof(char).

    Wieso nicht? Aber sizeof(int) >= sizeof(char) ist schon garantiert?! (was ja ausreicht in diesem Fall)



  • David_pb schrieb:

    SG1 schrieb:

    Das muss man strenggenommen sowieso, denn keiner garantiert einem, dass sizeof(int) > sizeof(char).

    Wieso nicht?

    Wieso einem das keiner garantiert? Keine Ahnung, frag die Standard-Autoren.

    Aber sizeof(int) >= sizeof(char) ist schon garantiert?!

    Ja.

    (was ja ausreicht in diesem Fall)

    Nein. Wie unterscheidest Du dann zwischen EOF (der Konstante) und EOF (dem Zeichen?



  • supertux schrieb:

    SG1 schrieb:

    Das muss man strenggenommen sowieso, denn keiner garantiert einem, dass sizeof(int) > sizeof(char).

    ,

    ja, aber EOF ist eben eine int-Konstante, und getchar liefert ebenso ein int zurück.

    Das hilft einem genau gar nichts, wenn char und int den gleichen Wertebereich haben.


Anmelden zum Antworten