Vestavěné funkce knihovny pro uživatelský vstup | sscanf, scanf_s, fscanf_s, sscanf_s
Programovací jazyk C poskytuje různé funkce vestavěné knihovny pro uživatelský vstup. V tomto článku se dozvíme o funkcích knihovny sscanf scanf_s fscanf_s sscanf_s v jazyce C.
1. Funkce sscanf() v C
sscanf() se používá ke čtení formátovaného vstupu z řetězce. Funkce scanf() a sscanf() jsou podobné, jediný rozdíl mezi nimi je ten, že funkce scanf() čte vstup od uživatele ze standardního vstupu, jako je klávesnice, a funkce sscanf() čte vstup z řetězce a ukládá vstup do jiného řetězce.
Syntax
int sscanf ( const char * str const char * format ...);
Parametry
- V případě úspěchu funkce vrátí počet úspěšně přečtených hodnot.
- V případě selhání vstupu dříve, než je možné úspěšně přečíst jakákoli data, se vrátí EOF.
- V případě úspěchu funkce vrátí počet přečtených hodnot.
- V případě selhání vstupu dříve, než bylo možné úspěšně přečíst jakákoli data, se vrátí EOF.
- Pokud je velikost vyrovnávací paměti rovna nebo menší než velikost pole, pak zadání větší nebo rovné velikosti vyrovnávací paměti povede ke ztrátě dat, protože nadbytečná data budou zkrácena a budou načtena data do velikosti vyrovnávací paměti - 1.
- Pokud je velikost vyrovnávací paměti větší než velikost pole, pak
- zadání menší než velikost vyrovnávací paměti bude fungovat, ale zobrazí chybu
- zadání větší než velikost vyrovnávací paměti povede k přetečení vyrovnávací paměti a vyvolá stejnou chybu.
- V případě úspěchu funkce vrátí počet úspěšně přečtených hodnot.
- V případě selhání vstupu dříve, než bylo možné úspěšně přečíst jakákoli data, se vrátí EOF.
- V případě úspěchu funkce vrátí počet úspěšně přečtených hodnot.
- V případě selhání vstupu dříve, než bylo možné úspěšně přečíst jakákoli data, se vrátí EOF.
Návratová hodnota
Poznámka : Těchto argumentů by mělo být alespoň tolik, kolik je hodnot uložených ve specifikátorech formátu.
Příklad: C Program pro ilustraci funkce sscanf
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 ; }
Výstup
3 blue balls
2. Funkce scanf_s() v C
Tato funkce je specifická pro kompilátory společnosti Microsoft. Je to stejné jako scanf kromě toho, že nezpůsobuje přetížení vyrovnávací paměti. Funkce scanf_s() je bezpečnější než funkce scanf(), protože poskytuje další parametr pro specifikaci velikosti vyrovnávací paměti, která může zabránit přetečení vyrovnávací paměti.
Syntax
int scanf_s (const char *format [argument]...);
Parametry
Poznámka : Zde můžeme specifikovat velikost bufferu a vlastně řídit limit vstupu, aby celá aplikace nespadla kvůli přetečení paměti.
Návratová hodnota
Proč používat scanf_s()?
scanf pouze čte jakýkoli vstup poskytnutý z konzoly. C nekontroluje, zda se uživatelský vstup vejde do proměnné, kterou jste určili. Pokud máte pole s názvem color[3] a použijete scanf pro řetězec Red, bude to fungovat dobře, ale pokud uživatel zadá více než 3 znaky, scanf začne zapisovat do paměti, která nepatří do pole barev.
C to nezachytí ani vás neupozorní a může nebo nemusí spadnout program v závislosti na tom, zda se něco pokusí o přístup a zápis do tohoto paměťového slotu, který nepatří do barevného pole. Zde vstupuje do hry scanf_s. scanf_s kontroluje, zda se uživatelský vstup vejde do daného paměťového prostoru.
Poznámka : scanf_s() bude fungovat pouze v Microsoft Visual Studio.
Příklad 1: C Program pro ilustraci funkce sscanf_s
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 ; }
Vstup 1
Red
Výstup 1
Red
Vstup 2
Yellow
Výstup 2
No Output
Příklad 2: C Program pro ilustraci vztahu mezi velikostí vyrovnávací paměti a velikostí pole.
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. Funkce fscanf_s() v C
Rozdíl mezi fscanf() a fscanf_s() je stejný jako u scanf() a scanf_s(). fscanf_s() je bezpečná funkce, která vyžaduje, aby velikost každého pole typu c Cs S a [ ] byla předána jako argument bezprostředně za proměnnou.
Syntax
int fscanf_s( FILE *stream const char *format [argument ]... );
Parametry
Poznámka : fscanf_s má další parametr, který specifikuje velikost vyrovnávací paměti a skutečně řídí limit vstupu.
Návratová hodnota
Poznámka : fscanf_s bude fungovat pouze v MS Visual Studio.
Příklad: C Program pro ilustraci funkce fscanf_s
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 ); }
Výstup
String1 |Hello| String2 |World| String3 |its| Integer |2017|
4. Funkce sscanf_s() v C
sscanf_s() je bezpečná funkce sscanf() a zabezpečené funkce vyžadují, aby velikost každého pole typu c C s S a [ byla předána jako argument bezprostředně za proměnnou.
Syntax
int sscanf_s (const char * restrict buffer const char * restrict format ...);
Parametry
Poznámka : sscanf_s má další parametr, který specifikuje velikost vyrovnávací paměti a skutečně řídí limit vstupu.
Návratová hodnota
Poznámka : sscanf_s() bude fungovat pouze v Microsoft Visual Studio.
Příklad: C Program pro ilustraci funkce sscanf_s
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 ; }
Výstup
3 blue balls
Vytvořit kvíz