ueberschreibt nicht



  • Guten Abend!

    Das ist merkwürdig : scanf ist es ja egal ob die chars , die er aus dem T.puffer holt denn in die var. passen oder nicht. Wenn sie nicht passen , dann werden eben ein Paar vars. überschrieben. Das habe ich versucht mir selbst mit eclipse zu beweisen : Ich habe im unten aufgeschriebenen Programm die Zahl "2222" eingegeben . Das sind 2 Bytes / 2 chars mehr , als man überhaupt in eine short-var speichern kann --> Also müsste die var cvar2 überschrieben werden. Doch es passiert was ganz anderes :

    #include <stdio.h>
    
    int main(void)
    {
    	short hivar;
    	int cvar2 = 1;
    
    	printf("%i\n", cvar2);
    
    	scanf("%hi", &hivar);
    
    	printf("%hi\n", hivar);
    
    	printf("%i", cvar2);
    
    	return(0);
    }
    

    Ausgabe der hivar : 2222 ( Es dürfte doch nur "22" ausgegeben werden , da in eine short - var nur 2 chars aus dem t.puffer passen ) .
    Ausgabe der cvar : 1 ( cvar dürfte doch überschrieben werden , und die Ausgabe müsste so aussehen : 2 ) . Auch wenn ich für "hivar" --> "222222222222222" eingebe , wird als Wert von cvar "1" ausgegeben. In Kombination von char & string variablen werden aber best. vars schon überschrieben.



  • die variablen müssen nicht in der gleichen reihenfolge und lückenlos im speicher stehen, wie du's im quelltext hingeschrieben hast. lass dir doch mal die adressen anzeigen.
    🙂



  • null schrieb:

    Ausgabe der hivar : 2222 ( Es dürfte doch nur "22" ausgegeben werden , da in eine short - var nur 2 chars aus dem t.puffer passen ) .

    Die Anzahl der Zeichen hat damit nur indirekt zu tun. Wenn ein short bei dir 2 Byte groß ist, geht der Wertebereich von -32768 bis 32767. 2222 passt also locker rein.



  • Es ist doch so : Von scanf werden wirklich einzelne chars aus dem T.puffer geholt. All diese chars sind 1 Byte groß ( 1 Byte verschlüsselt ) . Und diese Bytes landen dann eben in der short - var die 2 Byte groß ist. Und wenn scanf 3 Bytes aus dem Puffer holt , dann passen diese eben nicht in die 2 Byte große short - var. Und außerdem : Ich habe auch "22222222222222222222222" eingegeben --> das dürfte nicht in die short-var passen. Wenn das nicht stimmt , wie lautet die korrekte Theorie?



  • Die korrekte "Theorie" hat MFK ja schon geschrieben. Du liest ein short (%hi) ein, es wird ein short geschrieben. Das was du hier vermutest würde aber eigentlich nur bei der Eingabe von Strings (%s) passieren. Lies dir das Manual zu printf() nochmal durch.


Anmelden zum Antworten