String aus Terminal einlesen

OP #541714
Lesenswert?
• ▲
▼
Analog meinem ersten Beitrag heute möchte ich jetzt einen String per 
Terminal einlesen.

char c[100];

print("Starting mytest\n");
gets(c);

gets erwartet ja am Ende ein NEWLINE. Wie realisiere ich das im 
Terminal? Eingabe von Enter oder \n im Terminalfenster bewirkte kein 
Weiterlaufen des Programms.
#541727
Lesenswert?
• ▲
▼
* Indem du dein Terminalprogramm so umkonfigurierst, dass
  es das Zeichen wegschickt (entweder CR oder LF), welches
  deine spezielle Implementierung von gets() sehen
  möchte

* Indem du dir selbst eienen Ersatz für gets() schreibst
  und dadurch die Kontrolle darüber hast, mit welchem
  Zeichen eine Eingabe als abgeschlossen gilt.

PS: Wer gets() benutzt, sollte sofort seine Lizenz zum
    Programmieren verlieren. gets() ist eine *Un*funktion
    die am besten nie in C aufgenommen worden wäre. Immer
    fgets() benutzen.
    Was ist falsch an gets()?
    Schau dir die Argumentliste an und dann beantworte die
    Frage: Wie kann gets() verhindern, dass ein Benutzer
    durch seine Eingabe den Buffer den gets() bekommt
    überlaufen lässt.
    Die Antwort: gar nicht
    Und deshalb gehören gets() Programmierer sofort mit dem
    nassen Fetzen verjagt.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.