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.