Das ist in der Tat eine einfache Angelegenheit. Deine Vermutung ist auch schon richtig, in der Tat übersteigt der Speicherplatz für fünf Buchstaben die der char Variable in die geschrieben wird. Mehr speicher kannst du z.B. durch malloc anfordern, oder dadurch das du die Address eines Arrays übergibts. Das Problem mit einem Solchen Ansatz ist, das der Speicher dann immer noch überlaufen kann, und auch meistens wird. Beispiel: Du reservierst Speicher für 20 Buchstaben weil du keinen Nahmen kennst der länger als 20 Buchstaben ist. Aber was ist wenn doch mal jemand kommt der einen längeren Namen hat? Dein Programm stürzt vermutlich wieder ab. Du hast, um auf der sicheren Seite zu sein also zwei Alternativen: Entweder du schneidest das Lesen nach einer bestimmten Anzahl von Zeichen ab. Das löst dein Problem aber nicht wirklich. Dann wird der Mensch mit einem längeren Namen zwar nicht dein Programm zu Absturz bringen, aber er kann seine Namen trotzdem nicht richtig eingeben. Oder du benutzt eine Eingaberoutine die immer wenn Speicherbereich voll wird, den Speicher vergrößert. Damit hast du das Problem gelöst.
Nun hast du nicht gesagt ob du mit C oder C++ arbeitest. Dein Snippet könnte beides sein. Deshalb sage ich dir einfach mal wie man das mit C++ machen kann:
Code:
#include <iostream> // für Eingabe/Ausgabe routinen
...
{
std::string vorname, nachname, p;
std::cout << "\nVorname";
std::cin >> vorname;
std::cout << "\nNachname";
std::cin >> nachname;
std::cout << "\ncode";
std::cin >> p;
...
}
Dieser Ausschnitt ist ziemlich robust. Insbesondere wird kein Speicherzugriffsfehler auftreten weil die C++ Eingaberoutinen für formatierte Eingabe selbstätig genügend viel Speicher anlegen.
Auch wenn du diesen Ausschnitt jetzt übernehmen könntest, würde ich dir trotzdem dazu raten, ein gutes Buch oder wenigstens gute Online-Ressourcen zum Thema (Programmieren mit C++ (oder C) ) zu lesen.
Lesezeichen