Gast
#1286669
moin,
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
Hat hier jemand eine Idee warum sich das Programm in der markierten Zeile verabschiedet? Gruß Max
|
Anzeige
|
struct und strcpy
Gast
#1286669
moin,
Hat hier jemand eine Idee warum sich das Programm in der markierten Zeile verabschiedet? Gruß Max
Gast
#1286677
dafür müssen wir wissen was du ein INPUT eingibst. Wenn du mehr als 20 zeichen eingibst ist klar das ein Programm sich undefiniert verhählt. Mal wieder ein schönen beispiel wie man sicherheitslücken in C programm ein baut! Wenn ich Compiler wäre, würde ich das anmeckern:
Vermutlich hast du einfach die Warnung ignoriert? Denn tmp[0] ist ein char, verlangt wird aber bei strcpy() char*. Wahrscheinlich meintest du:
bzw.
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... Abgeshen davon, daß es ohnehin Unfug ist... Der Benutzer soll etwas in der Form DD.MM.YYYY eingeben? Das sind ja schon 10 Zeichen, zzgl abschl. 0 macht es 11. Das wird in ein char[20] kopiert und in der Funktion dann in ein char[10], das kann gar nicht gut gehen (von dem Fehler mit tmp[0] abgesehen). (Wenn das gehen würde. wäre es immer noch Quatsch, das ganze Datum in den Monat zu kopieren, aber da kommt es dann auch nicht mehr drauf an.I
Gast
#1286754
> (Wenn das gehen würde. wäre es immer noch Quatsch, das ganze > Datum in den Monat zu kopieren, aber da kommt es dann auch > nicht mehr drauf an.I Das Kuriose ist, dass es aber sogar funktionieren würde (wenn man denn auch später das ganze Datum wieder aus dem Monat liest). Landet das abschließende '\0' eben in Tag[0], wo sie von einem strcpy oder strlen auch wieder gefunden wird... In diesem Fall ja, solange der Benutzer es nicht mit der Länge übertreibt. So wie das Programm aber aussieht, geht es mit der nächsten Erweiterung wieder schief. Ziemlich gruselig... Vielleicht sind die Jahr[] und Tag[] ja nur drin, weil es sonst schon vorher abstürzt? Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|