theton
Bitmuncher
Ich habe weniger ein Problem (bzw. ist selbiges bereits geloest), als eher mal eine Frage, die mir vielleicht hier jemand beantworten kann. Bei folgendem Code bekomme ich einen Buffer-Overflow und mir ist absolut nicht klar, wodurch dieser ausgeloest wird.
Was der Code tun soll, duerfte ja klar sein... Datei oeffnen -> Inhalt einlesen -> Inhalt fuer die weitere Verarbeitung in message ablegen. message muss vom Datentyp 'char *' sein, da bei der Weiterverarbeitung Funktionen genutzt werden, die aus der C-Bibliothek stammen und da sie eben fuer C sind, koennen sie nicht mit String-Klassen umgehen.
Mir ist nun nur nicht klar, warum ein Speicherzugriffsfehler beim strcpy() ausgeloest wird. Selbst wenn ich mit strncpy() nur die ersten 5 Zeichen genommen habe, kam es zu einem Zugriffsfehler und auch eine Initialisierung von message am Anfang der Funktion mit einem festen Wert brachte keine Abhilfe. Die schaffte uebrigens ein simples
Und ja, mir ist klar, dass strcpy() auch nicht aus der C++-Bibliothek ist, aber ich bin nunmal daran gewoehnt und bin dadurch auf diesen seltsamen Fehler gestossen, der mir nun einiges Kopfzerbrechen bereitet.
Nachtrag: Ganz vergessen... g++ (GCC) 3.3.5 (Debian 1:3.3.5-13)
Code:
...
std::string mfilename; // die einzulesende Datei
std::string filedata; // der Inhalt der Datei
char *message; // hier brauchen wir den Datei-Inhalt
std::ifstream file(mfilename.c_str(), std::ios::binary | std::ios::in);
if(!file) {
std::cerr << "Couldn't open message file!" << std::endl;
exit(1);
}
/* Inhalt der Datei einlesen */
char c = file.get();
for( ; file.good(); c=file.get()) {
if(file.bad()) {
break;
}
filedata.push_back(c);
}
strcpy(message, filedata.c_str()); // hier wird der Zugriffsfehler ausgeloest
...
Mir ist nun nur nicht klar, warum ein Speicherzugriffsfehler beim strcpy() ausgeloest wird. Selbst wenn ich mit strncpy() nur die ersten 5 Zeichen genommen habe, kam es zu einem Zugriffsfehler und auch eine Initialisierung von message am Anfang der Funktion mit einem festen Wert brachte keine Abhilfe. Die schaffte uebrigens ein simples
Code:
message = filedata.c_str();
Nachtrag: Ganz vergessen... g++ (GCC) 3.3.5 (Debian 1:3.3.5-13)
Zuletzt bearbeitet: