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
- 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.
- 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.
- 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.
- 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.
- 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.
Rückgabewert
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
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
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; }
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
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
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
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
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