logo

Integrierte Bibliotheksfunktionen für Benutzereingaben | sscanf, scanf_s, fscanf_s, sscanf_s

Die Programmiersprache C bietet verschiedene integrierte Bibliotheksfunktionen für Benutzereingaben. In diesem Artikel lernen wir die Bibliotheksfunktionen sscanf scanf_s fscanf_s sscanf_s in C kennen.

1. sscanf()-Funktion in C

sscanf() wird verwendet, um formatierte Eingaben aus der Zeichenfolge zu lesen. Die Funktionen scanf() und sscanf() ähneln sich. Der einzige Unterschied zwischen ihnen besteht darin, dass die Funktion scanf() Eingaben des Benutzers über die Standardeingabe wie eine Tastatur liest und die Funktion sscanf() Eingaben aus einer Zeichenfolge liest und die Eingaben in einer anderen Zeichenfolge speichert.

Syntax

int   sscanf   ( const char *   str   const char *   format   ...);

Parameter

    str: Eingabezeichenfolge, aus der wir Daten lesen möchten.Format: Eine Zeichenfolge, die die Typspezifizierer enthält.… (Auslassungspunkte): Zeigt an, dass die Funktion eine variable Anzahl von Argumenten akzeptiert.

Rückgabewert

  • Bei Erfolg gibt die Funktion die Anzahl der erfolgreich gelesenen Werte zurück.
  • Im Falle eines Eingabefehlers, bevor Daten erfolgreich gelesen werden können, wird EOF zurückgegeben.

Notiz : Es sollten mindestens so viele dieser Argumente vorhanden sein, wie von den Formatbezeichnern gespeicherte Werte vorhanden sind.



Beispiel: C-Programm zur Veranschaulichung der sscanf-Funktion

C
// C program to illustrate sscanf statement #include  int main() {  // declaring array s  char s[] = '3 red balls 2 blue balls';  char str[10] str2[10];  int i;  // %*s is used to skip a word  sscanf(s '%d %*s %*s %*s %s %s' &i str str2);  printf('%d %s %s n' i str str2);  return 0; } 

Ausgabe
3 blue balls 

2. scanf_s() Funktion in C

Diese Funktion ist spezifisch für Microsoft-Compiler. Es ist dasselbe wie scanf, außer dass es keine Pufferüberlastung verursacht. Die Funktion scanf_s() ist sicherer als die Funktion scanf(), da sie einen zusätzlichen Parameter zur Angabe der Puffergröße bereitstellt, der einen Pufferüberlauf verhindern kann.

Syntax

int   scanf_s  (const char *format [argument]...);

Parameter

    Strom: Zeiger auf das File-Objekt, das den Stream identifiziert.Format: Es handelt sich um eine Zeichenfolge, die die Typspezifizierer enthält.… (Auslassungspunkte): Zeigt an, dass die Funktion eine variable Anzahl von Argumenten akzeptiert.

Notiz : Hier können wir die Puffergröße angeben und tatsächlich die Grenze der Eingabe steuern, damit die gesamte Anwendung nicht aufgrund eines Speicherüberlaufs abstürzt.

Rückgabewert

  • Bei Erfolg gibt die Funktion die Anzahl der gelesenen Werte zurück.
  • Im Falle eines Eingabefehlers, bevor Daten erfolgreich gelesen werden konnten, wird EOF zurückgegeben.

Warum scanf_s() verwenden?

scanf liest einfach alle Eingaben, die von der Konsole bereitgestellt werden. C prüft nicht, ob die Benutzereingabe in die von Ihnen angegebene Variable passt. Wenn Sie ein Array namens color[3] haben und scanf für die Zeichenfolge Red verwenden, funktioniert es einwandfrei, aber wenn der Benutzer mehr als 3 Zeichen eingibt, beginnt scanf mit dem Schreiben in den Speicher, der nicht zum Farbarray gehört.

C fängt dies nicht ab und warnt Sie nicht und es kann zum Absturz des Programms kommen, je nachdem, ob etwas versucht, auf den Speichersteckplatz zuzugreifen und darauf zu schreiben, der nicht zum Farbarray gehört. Hier kommt scanf_s ins Spiel. scanf_s prüft, ob die Benutzereingabe in den angegebenen Speicherplatz passt.

Boolescher Wert zum Stringen

Notiz : scanf_s() funktioniert nur in Microsoft Visual Studio.

Beispiel 1: C-Programm zur Veranschaulichung der sscanf_s-Funktion

C
// C program to illustrate sscanf_s statement // scanf_s() will only work in Microsoft Visual Studio. #include  #include  int main() {  char a[5];  // sizeof(a) is buffer size  scanf_s('%s' a sizeof(a));  printf('n%s ' a);  return 0; } 


Eingabe 1

ABS-C-Code
Red

Ausgang 1

Red

Eingabe 2

Yellow

Ausgang 2

No Output

Beispiel 2: C-Programm zur Veranschaulichung der Beziehung zwischen Puffergröße und Array-Größe.

C++
// C++ program // consumes the Enter key // (newline character) pressed after input #include  int main() {  // example  char ch[100000];  printf('Enter characters: ');  scanf_s('%s' ch 99999);  getchar();  return 0; } 
C
// C program // consumes the Enter key // (newline character) pressed after input #include  int main() {  char ch[100000];  printf('Enter characters: ');  scanf_s('%s' ch 99999);  getchar();  return 0; } 
  • Wenn die Puffergröße gleich oder kleiner als die Größe des Arrays ist, führt die Eingabe größer oder gleich der Puffergröße zu Datenverlust, da die überschüssigen Daten abgeschnitten werden und die Daten bis zur Puffergröße - 1 gelesen werden.
  • Wenn die Puffergröße größer als die Größe eines Arrays ist, dann
    • Eingaben, die kleiner als die Puffergröße sind, funktionieren zwar, geben aber einen Fehler aus
    • Eine Eingabe größer als die Puffergröße führt zu einem Pufferüberlauf und gibt den gleichen Fehler aus.

3. fscanf_s() Funktion in C

Der Unterschied zwischen fscanf() und fscanf_s() ist derselbe wie der von scanf() und scanf_s(). fscanf_s() ist eine sichere Funktion, die erfordert, dass die Größe jedes Feldes vom Typ c C s S und [ ] als Argument unmittelbar nach der Variablen übergeben wird.

Syntax

int fscanf_s( FILE *stream const char *format [argument ]... );

Parameter

    str: Zeichenfolge, die zum Abrufen von Daten verwendet wirdFormat: Zeichenfolge, die die Typspezifizierer enthält.… (Auslassungspunkte): Zeigt an, dass die Funktion eine variable Anzahl von Argumenten akzeptiert.

Notiz : fscanf_s verfügt über einen zusätzlichen Parameter, um die Puffergröße anzugeben und tatsächlich die Grenze der Eingabe zu steuern.

Rückgabewert

  • Bei Erfolg gibt die Funktion die Anzahl der erfolgreich gelesenen Werte zurück.
  • Im Falle eines Eingabefehlers, bevor Daten erfolgreich gelesen werden konnten, wird EOF zurückgegeben.

Notiz : fscanf_s funktioniert nur in MS Visual Studio.

Linux Mint Cinnamon vs. Mate

Beispiel: C-Programm zur Veranschaulichung der fscanf_s-Funktion

C
// C program to illustrate fscanf_s statement // This program will run on MS Visual studio #include  #include  int main() {  char s1[10] s2[10] s3[10];  int year;  // file pointer  FILE* fp;  // Open file securely  fopen_s(&fp 'file.txt' 'w+');  fputs('Hello World its 2017' fp);  rewind(fp);  // Using fscanf_s  fscanf_s(fp '%s' s1 sizeof(s1));  fscanf_s(fp '%s' s2 sizeof(s2));  fscanf_s(fp '%s' s3 sizeof(s3));  fscanf_s(fp '%d' &year sizeof(year));  printf('String1 |%s|n' s1);  printf('String2 |%s|n' s2);  printf('String3 |%s|n' s3);  printf('Integer |%d|n' year);  fclose(fp);  return (0); } 


Ausgabe

String1 |Hello| String2 |World| String3 |its| Integer |2017|

4. sscanf_s() Funktion in C

sscanf_s() ist eine sichere Funktion von sscanf() und sichere Funktionen erfordern, dass die Größe jedes Feldes vom Typ c C s S und [ als Argument unmittelbar nach der Variablen übergeben wird.

Syntax

int   sscanf_s  (const char *  restrict buffer   const char *  restrict format   ...);

Parameter

    str: Zeichenfolge, die zum Abrufen von Daten verwendet wirdFormat: Zeichenfolge, die die Typspezifizierer enthält.… (Auslassungspunkte): Zeigt an, dass die Funktion eine variable Anzahl von Argumenten akzeptiert.

Notiz : sscanf_s verfügt über einen zusätzlichen Parameter, um die Puffergröße anzugeben und tatsächlich die Grenze der Eingabe zu steuern.

Rückgabewert

  • Bei Erfolg gibt die Funktion die Anzahl der erfolgreich gelesenen Werte zurück.
  • Im Falle eines Eingabefehlers, bevor Daten erfolgreich gelesen werden konnten, wird EOF zurückgegeben.

Notiz : sscanf_s() funktioniert nur in Microsoft Visual Studio.

Beispiel: C-Programm zur Veranschaulichung der sscanf_s-Funktion

C
// C program to illustrate sscanf_s statement // This program will run on MS Visual studio #include  int main() {  char s[] = '3 red balls 2 blue balls';  char str[10] str2[10];  int i;  // %*s is used to skip a word  sscanf_s(s '%d' &i sizeof(i));  sscanf_s(s '%*d %*s %*s %*s %s' str sizeof(str));  sscanf_s(s '%*d %*s %*s %*s %*s %s' str2  sizeof(str2));  printf('%d %s %s n' i str str2);  return 0; } 


Ausgabe

3 blue balls

Quiz erstellen