Bernhard N. schrieb:
> teilweise überschrieben? Warum also wird das int i = 123 nicht
> überschrieben bzw.
Weil es von den Details abhängt, wie der Compiler die Dinge im Speicher
anordnet.
Probier mal
int j = 567;
char gStr[] = "";
int i = 123;
also eine Variable davor und eine danach. Meistens ist es so, dass eine
der beiden danach Schrott enthält weil der Compiler die Variablen ja
auch nicht irgendwie willkürlich im Speicher anordnet, sondern eine
bestimmte Reihenfolge einhält.
Genau das bedeutet: undefined behaviour
Alles mögliche kann passieren. Inklusive "sieht so aus als ob es geht".
Aber ein Fehler, den man nicht sieht ist immer noch ein Fehler.
> warum gibt der Compiler keine Warnungen oder
> Fehlermeldungen aus?
Da müsste er ständig warnen. Der Compiler weiß ja nicht, wie groß der
String ist, den du ins Array kopieren willst.
(OK. Mit einer aufwändigen Analyse könnte er das IN DEINEM FALL
rausfinden. Aber im Allgemeinen geht das nicht. Array und Funktion die
das Array beschreibt müssen ja nicht in derselben Compilation Unit sein)