Namespaces
Variants

gets, gets_s

From cppreference.net
< c ‎ | io
Definiert in Header <stdio.h>
char * gets ( char * str ) ;
(1) (entfernt in C11)
char * gets_s ( char * str, rsize_t n ) ;
(2) (seit C11)
1) Liest von stdin in das Zeichenarray, auf das str zeigt, bis ein Zeilenumbruchzeichen gefunden wird oder das Dateiende erreicht ist. Ein Nullzeichen wird unmittelbar nach dem letzten gelesenen Zeichen in das Array geschrieben. Das Zeilenumbruchzeichen wird verworfen, aber nicht im Puffer gespeichert.
2) Liest Zeichen von stdin bis ein Zeilenumbruch gefunden wird oder das Dateiende erreicht ist. Schreibt maximal n - 1 Zeichen in das Array, auf das str zeigt, und schreibt immer das abschließende Nullzeichen (sofern str kein Nullzeiger ist). Das Zeilenumbruchzeichen wird, falls gefunden, verworfen und zählt nicht zur Anzahl der in den Puffer geschriebenen Zeichen.
Die folgenden Fehler werden zur Laufzeit erkannt und rufen die aktuell installierte Constraint-Handler -Funktion auf:
  • n ist null;
  • n ist größer als RSIZE_MAX ;
  • str ist ein Nullzeiger;
  • endline oder eof nicht erreicht nach dem Speichern von n - 1 Zeichen im Puffer.
In jedem Fall beendet gets_s zuerst das Lesen und Verwerten der Zeichen von stdin bis zum Zeilenumbruchzeichen, Dateiende-Zustand oder Lesefehler, bevor der Constraint-Handler aufgerufen wird.
Wie bei allen grenzprüfenden Funktionen, ist gets_s nur garantiert verfügbar, wenn __STDC_LIB_EXT1__ durch die Implementierung definiert ist und wenn der Benutzer __STDC_WANT_LIB_EXT1__ auf den Integer-Konstantenwert 1 setzt, bevor <stdio.h> inkludiert wird.

Inhaltsverzeichnis

Parameter

str - ein Zeichenarray, in das die Zeichen von stdin geschrieben werden sollen
n - maximale Anzahl von Zeichen, die in das durch str adressierte Array geschrieben werden können

Rückgabewert

str bei Erfolg, ein Nullzeiger bei Misserfolg.

Wenn der Fehler durch eine Dateiende-Bedingung verursacht wurde, wird zusätzlich der eof -Indikator gesetzt (siehe feof() ) auf stdin . Wenn der Fehler durch einen anderen Fehler verursacht wurde, wird der error -Indikator gesetzt (siehe ferror() ) auf stdin .

Hinweise

Die gets() -Funktion führt keine Grenzprüfungen durch, daher ist diese Funktion extrem anfällig für Pufferüberlauf-Angriffe. Sie kann nicht sicher verwendet werden (es sei denn, das Programm läuft in einer Umgebung, die einschränkt, was auf stdin erscheinen kann). Aus diesem Grund wurde die Funktion im dritten Corrigendum zum C99-Standard als veraltet markiert und im C11-Standard vollständig entfernt. fgets() und gets_s() sind die empfohlenen Ersetzungen.

WARNUNG: Verwenden Sie niemals gets() .

Referenzen

  • C23-Standard (ISO/IEC 9899:2024):
  • K.3.5.4.1 Die gets_s-Funktion (S.: TBD)
  • C17-Standard (ISO/IEC 9899:2018):
  • K.3.5.4.1 Die gets_s-Funktion (S.: TBD)
  • C11-Standard (ISO/IEC 9899:2011):
  • K.3.5.4.1 Die gets_s-Funktion (S: 602-603)
  • C99-Standard (ISO/IEC 9899:1999):
  • 7.19.7.7 Die gets-Funktion (S. 298)
  • C89/C90 Standard (ISO/IEC 9899:1990):
  • 4.9.7.7 Die gets-Funktion

Siehe auch

liest formatierten Input von stdin , einem Dateistrom oder einem Puffer
(Funktion)
liest eine Zeichenkette aus einem Dateistrom
(Funktion)
schreibt eine Zeichenkette in einen Dateistrom
(Funktion)
liest von einem Strom in einen automatisch vergrößerten Puffer bis Trennzeichen/Zeilende
(Funktion)