Wenn ich Compiler wäre, würde ich das anmeckern:
1 | strcpy(datum.Monat, tmp[0]);
|
Vermutlich hast du einfach die Warnung ignoriert?
Denn tmp[0] ist ein char, verlangt wird aber bei strcpy() char*.
Wahrscheinlich meintest du:
1 | strcpy(datum.Monat, &tmp[0]);
|
bzw.
1 | strcpy(datum.Monat, tmp);
|
In deiner Form kopierst du ab der Adresse, die in dem einen
Byte tmp[0] steht (also irgendwo ganz unten im Speicher) solange,
bis eine abschließende 0 kommt. Das kann durchaus mehr
als 10 Zeichen lang sein.
Wie bereits Peter treffend sagt, fehlt es aber auch an
allen Sicherheitsmaßnahmen...