fgets () enthält den Zeilenumbruch am Ende [duplizieren]

9
%Vor%

Wenn ich quit gebe, wird das Programm nicht beendet; Ich frage mich, warum das so ist.

Übrigens wird input als char *input; deklariert.

    
Man Person 18.11.2012, 19:35
quelle

5 Antworten

8

Nachgestellter Zeilenumbruch in Ihrer Eingabe. Siehe man fgets . Testen Sie für "quit" + newline, zum Beispiel:

%Vor%

Ich habe den letzten Satz total vermisst, re char *input . Abhängig von der Architektur ist input 4 oder 8 Byte lang. Also ist der Code effektiv

%Vor%

zeigt nicht die tatsächliche Speichergröße an, auf die input zeigt. Dies kann "funktionieren", solange die Eingabe kürzer als acht Bytes ist, aber die Eingabe wird abgeschnitten, wenn sie größer ist. Außerdem erhalten Sie den Rest der Eingabe beim nächsten Aufruf von fgets .

Sie sollten entweder die tatsächliche Größe angeben oder den Rat von JonathanLeffler befolgen und stattdessen ein Char-Array deklarieren, z. B.

%Vor%

oder

%Vor%     
Olaf Dietsche 18.11.2012, 19:38
quelle
12

Die Funktion fgets könnte am Ende des gelesenen Strings einen Zeilenumbruch hinzufügen. Du musst das überprüfen:

%Vor%

oder sogar

%Vor%     
codaddict 18.11.2012 19:37
quelle
0

Schlagen Sie Folgendes vor:

%Vor%

Grund: Dies löst das Problem, dass Personen zusätzliche Zeichen hinzufügen (z. B. Leerzeichen vor oder nach dem Text).

    
Jonathon David White 31.05.2017 13:33
quelle
-1

Diese Lösung benötigt nur die Standardbibliothek (stdio.h) und liefert die gleichen Ergebnisse.

%Vor%     
csr-nontol 24.05.2015 20:31
quelle
-2

Was ich getan habe ist, Newline durch '\ 0' null zu ersetzen.

%Vor%     
Madan Ram 29.07.2013 15:07
quelle

Tags und Links