Strings mit Leerzeichen aus Konsole lesen
-
Hallo,
ich habe ein Programm wo ich einen String aus der Konsole lese um dann zu entscheiden was das Programm machen soll. Das ganze ist in einer Endlosschleife.
Gültige Strings sind "Hallo Welt" "Hallo" "Hi". Der Benutzer wird zuerst aufgefordert etwas einzugeben. Je nachdem welcher gültige String kommt wird etwas ausgegeben. Dann kommt der nächste Schleifendurchgang. Wenn etwas ungültiges eingegeben wird auch.Mit scanf bekomme ich Hallo und Hi hin. Er liest dummerweise aber nicht Leerzeichen mit. Wie könnte ich das einbauen? So dass "Hallo Welt" auch erkannt wird.
-
-
gets gibt mir aber ein Compile Warning. Das will ich nicht.
-
gets ist eine ganz normale Standard-Lib Funktion, wenn eine Warnung kommt liegt es an dir und deinen Code drumherum (Motto: der Compiler hat immer Recht). Besser aus Sicht robuster Programmierung ist statt gets aber fgets. Die liest ebenso auch Leerzeichen.
-
Der Compiler sagt, dass gets gefährlich ist und vermieden werden sollte.
Alternativen?Bei fgets stört mich das newline was mitgenommen wird.
-
Das newline musst du eigentlich immer löschen, sofern du keine eigene Funktion schreibst.
char *str; size_t len; getline(&str, &len, stdin); str[--len]='\0';
Diese Funktion ist leider nicht Standard C: http://www.gnu.org/s/libc/manual/html_node/Line-Input.html
-
gets
auf jeden Fall vermeiden, da sie dei Länge des Puffers nicht überprüft und man könnte theoretisch fremnden Code einschleusen.gets
zu benutzen ist eine Sicherheitslücke zu schreiben. Benute fgets. Wem das \n zu lässtig ist, dann folgenen tun:char *fgets_nnl(char *s, int size, FILE *stream) { char *ret; if((ret = fgets(s, size, stream))) { char *tmp = strrchr(s, '\n'); if(tmp) *tmp = 0; } return ret; }