Wie ordne ich ein char-Zeiger mit cin?
Also im Grunde, wenn ich versuche, dies zu tun
char* inputFileName;
cout<< "Filename: "; cin>>*inputFileName;
es ermöglicht mir die Eingabe der Dateinamen, aber wenn ich drücken Sie die EINGABETASTE, bekomme ich eine unbehandelte Ausnahme Fehler. Irgendwelche Ideen?
Bearbeiten, auch wenn ich versuche
char* inputFileName;
cout<< "Filename: "; cin>>inputFileName;
Bekomme ich eine debug assertion failed wenn ich versuche, um Sie auszuführen.
inputFileName
ist nur ein (dangling) Zeiger, es bietet keine Speicher für die Zeichenfolge; Sie haben zum reservieren von Speicher für den string, wie denn nun bist du nur sagen cin
zu schreiben, die lese-Zeichen in einer zufälligen (möglicherweise ungültigen) Speicher. Studie C-strings auf ein Buch, bevor messing mit Ihnen.ist die richtige. Auch sollte man nicht dereferenzieren
inputFileName
.Der richtige Weg ist, um sich nur nicht mit einem
char *
. Das ist es, was std::string
ist.InformationsquelleAutor Elliot678 | 2013-05-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie übergeben den Zeiger nicht dereferenziert Zeiger, und allokiert den Speicher für das char *
Weitere option neben
char inputFileName[BUFFER_SIZE];
istund später
Ich denke, mit string anstelle von array von chars könnte einfacher sein
Vereinbart, das ich verwenden würde, std::string, aber ich habe versucht, die Frage zu beantworten, wie Sie gefragt werden.
Es ist, Sie zu beantworten imo. Die OP-Bedürfnisse zu Lesen, in der eine Reihe von Zeichen, und das ist, was
cin >> someString;
tut (obwohl für eine Datei Namen, diegetline
wäre wahrscheinlich besser).cin >> someCharArray;
ist anfällig für buffer overflows. Wenn wir konzentriert sich auf die spezifische Frage für jede Frage, XY Fragen würde am Ende furchtbar und eine Menge Leute vermissen würden auf der Tatsache, dass es viel einfacher und sicherer Weg, um zu tun, was Sie zu tun versuchen.Das ist gefährlich! Garantiert stack-smashing-Schwachstelle (heap smashing wenn
new
verwendet wird) für nicht Vertrauenswürdige Eingabe verwendet. Sollte man zumindest tunstream >> std::setw(1024)
rsp.stream.width(1024)
, aber ich empfehlen, mitstd::string
weil es schwieriger ist, zu missbrauchen.InformationsquelleAutor Dr.Tower
Versuchen Sie es mit dieser:
InformationsquelleAutor OSHO