2016-05-01 11 views
0

Ich habe Probleme mit einer Konsolenanwendung, die ich machen muss. Das Problem ist, dass ich eine Void-Funktion habe, in der ich cin.getline aus <iostream> und <cstring> verwende.Begrenzen der Eingabe eines Str [n]

Meine Zeichenfolge ist wie folgt definiert: char str[50]; und jedes Mal, wenn ich mehr als 50 Symbole eingeben, komme ich in eine Endlosschleife und im Grunde stürzt mein Programm ab.

Kann jemand von Ihnen an eine Funktion denken, die alles über das Limit ignoriert (in diesem Fall 50), so dass mein Programm nicht abstürzt. Durch ignoriert, dann meine ich, wenn ich über 50 Symbole eingeben, das Programm sagt:

max 50 Symbole, bitte Eingang wieder:

+3

Warum nicht 'std :: string'? –

+3

Vielleicht fügen Sie etwas von Ihrem Code hinzu, damit Sie ein Feedback zu dem bekommen, was Sie bereits getan haben. – ZivS

Antwort

1

Nur std::getline anstelle von istream.getline. std::getline arbeitet mit std :: string und benötigt keinen vorbelegten Puffer.

Wenn Sie das 50 Char-Limit benötigen, überprüfen Sie die String-Größe, nachdem Sie die gesamte Zeile in die Zeichenfolge eingelesen haben.

1

Die zweite Unterschrift von getline

istream& getline (char* s, streamsize n, char delim); 

ist wahrscheinlich, was Sie wollen. Der Parameter streamsize n ist, was Sie suchen. This documentation könnte helfen. Vergessen Sie nicht, das Failbit zu überprüfen.

Wie andere erwähnt haben, ist die Verwendung von std :: string eine viel bessere Lösung, aber ich gebe Ihnen den Vorteil des Zweifels und nehme an, Sie haben einen Grund für die Zuweisung eines statischen C-Stil Zeichenpuffers.

Verwandte Themen