001
08.08.2007, 21:33 Uhr
0xdeadbeef
Gott (Operator)
|
char bedeutet ein einzelnes Zeichen, und nicht, wie du willst, eine Zeichenkette. Es wäre möglich, das mit char* zu machen, aber die manuelle Speicherverwaltung muss man sich eigentlich nicht antun, und
C++: |
char *dateiname; // dangling pointer! std::cin >> dateiname; // Speicherzugriffsfehler
|
wird zwar kompilieren, aber sich nicht ausführen lassen, weil dateiname nicht auf einen Speicherbereich zeigt, in den du einlesen darfst. Die einfachste Methode wäre, std::string zu benutzen, das sieht dann so aus:
C++: |
#include <iostream> #include <fstream> #include <string>
int main() { // In C++ und C99 muss int explizit angegeben werden std::string dateiname;
// Besser die ganze Zeile einlesen, für den Fall, dass Leerzeichen im // Dateinamen enthalten sein sollen. Außerdem bleiben so keine Rückstände // im Eingabestream. std::cin >> dateiname; ist auch möglich, aber hier // weniger gut. std::getline(std::cin, dateiname);
std::ifstream indatei(datei.c_str());
if(!indatei) { std::cerr << "Datei konnte nicht gefunden werden!"; // Typischerweise will man im Fehlerfall nicht 0 zurückgeben, // weil das konventionell für die Shell eine Erfolgsnachricht bedeutet return -1; }
// ... }
|
-- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 08.08.2007 um 21:34 Uhr von 0xdeadbeef editiert. |