Vstavané knižničné funkcie pre vstup užívateľa | sscanf, scanf_s, fscanf_s, sscanf_s
Programovací jazyk C poskytuje rôzne funkcie vstavanej knižnice pre vstup používateľa. V tomto článku sa dozvieme o funkciách knižnice sscanf scanf_s fscanf_s sscanf_s v jazyku C.
1. Funkcia sscanf() v jazyku C
sscanf() sa používa na čítanie formátovaného vstupu z reťazca. Funkcie scanf() aj sscanf() sú podobné, jediný rozdiel medzi nimi je ten, že funkcia scanf() číta vstup od používateľa zo štandardného vstupu, akým je klávesnica a funkcia sscanf() číta vstup z reťazca a ukladá vstup do iného reťazca.
Syntax
int sscanf ( const char * str const char * format ...);
Parametre
- V prípade úspechu funkcia vráti počet úspešne prečítaných hodnôt.
- V prípade zlyhania vstupu pred tým, ako je možné úspešne prečítať akékoľvek údaje, sa vráti EOF.
- V prípade úspechu funkcia vráti počet načítaných hodnôt.
- V prípade zlyhania vstupu pred tým, ako sa dáta podarilo úspešne prečítať, sa vráti EOF.
- Ak je veľkosť vyrovnávacej pamäte rovnaká alebo menšia ako veľkosť poľa, potom zadanie väčšie alebo rovné veľkosti vyrovnávacej pamäte povedie k strate údajov, pretože nadbytočné údaje budú skrátené a budú sa čítať údaje do veľkosti vyrovnávacej pamäte - 1.
- Ak je veľkosť vyrovnávacej pamäte väčšia ako veľkosť poľa, potom
- zadanie menšej ako veľkosť vyrovnávacej pamäte bude fungovať, ale zobrazí chybu
- zadanie väčšie ako veľkosť vyrovnávacej pamäte povedie k pretečeniu vyrovnávacej pamäte a spôsobí rovnakú chybu.
- V prípade úspechu funkcia vráti počet úspešne prečítaných hodnôt.
- V prípade zlyhania vstupu pred tým, ako sa dáta podarilo úspešne prečítať, sa vráti EOF.
- V prípade úspechu funkcia vráti počet úspešne prečítaných hodnôt.
- V prípade zlyhania vstupu pred tým, ako sa dáta podarilo úspešne prečítať, sa vráti EOF.
Návratová hodnota
Poznámka : Týchto argumentov by malo byť aspoň toľko, koľko hodnôt je uložených v špecifikátoroch formátu.
Príklad: C Program na ilustráciu funkcie 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. Funkcia scanf_s() v jazyku C
Táto funkcia je špecifická pre kompilátory spoločnosti Microsoft. Je to rovnaké ako scanf okrem toho, že nespôsobuje preťaženie vyrovnávacej pamäte. Funkcia scanf_s() je bezpečnejšia ako funkcia scanf(), pretože poskytuje dodatočný parameter na určenie veľkosti vyrovnávacej pamäte, ktorá môže zabrániť pretečeniu vyrovnávacej pamäte.
Syntax
int scanf_s (const char *format [argument]...);
Parametre
Poznámka : Tu môžeme špecifikovať veľkosť vyrovnávacej pamäte a vlastne kontrolovať limit vstupu, aby celá aplikácia nespadla kvôli pretečeniu pamäte.
Návratová hodnota
Prečo používať scanf_s()?
scanf len prečíta akýkoľvek vstup poskytnutý z konzoly. C nekontroluje, či sa vstup používateľa zmestí do premennej, ktorú ste určili. Ak máte pole s názvom color[3] a použijete scanf pre reťazec Red, bude to fungovať dobre, ale ak používateľ zadá viac ako 3 znaky, scanf začne zapisovať do pamäte, ktorá nepatrí do farebného poľa.
C to nezachytí ani vás neupozorní a môže alebo nemusí zlyhať program v závislosti od toho, či sa niečo pokúsi o prístup a zápis do tohto pamäťového slotu, ktorý nepatrí do farebného poľa. Tu vstupuje do hry scanf_s. scanf_s skontroluje, či sa vstup používateľa zmestí do daného pamäťového priestoru.
Poznámka : scanf_s() bude fungovať iba v Microsoft Visual Studio.
Príklad 1: C Program na ilustráciu funkcie 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
Príklad 2: C Program na ilustráciu vzťahu medzi veľkosťou vyrovnávacej pamäte a veľkosťou poľa.
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. Funkcia fscanf_s() v jazyku C
Rozdiel medzi fscanf() a fscanf_s() je rovnaký ako medzi scanf() a scanf_s(). fscanf_s() je bezpečná funkcia, ktorá vyžaduje, aby veľkosť každého poľa typu c Cs S a [ ] bola odovzdaná ako argument bezprostredne za premennou.
Syntax
int fscanf_s( FILE *stream const char *format [argument ]... );
Parametre
Poznámka : fscanf_s má ďalší parameter na špecifikáciu veľkosti vyrovnávacej pamäte a skutočne kontroluje limit vstupu.
Návratová hodnota
Poznámka : fscanf_s bude fungovať iba v MS Visual Studio.
Príklad: C Program na ilustráciu funkcie 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. Funkcia sscanf_s() v jazyku C
sscanf_s() je bezpečná funkcia sscanf() a bezpečné funkcie vyžadujú, aby veľkosť každého poľa typu c C s S a [ bola odovzdaná ako argument bezprostredne za premennou.
Syntax
int sscanf_s (const char * restrict buffer const char * restrict format ...);
Parametre
Poznámka : sscanf_s má ďalší parameter na špecifikáciu veľkosti vyrovnávacej pamäte a skutočne kontroluje limit vstupu.
Návratová hodnota
Poznámka : sscanf_s() bude fungovať iba v Microsoft Visual Studio.
Príklad: C Program na ilustráciu funkcie 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
Vytvoriť kvíz
Mohlo By Sa Vám Páčiť
Najlepšie Články
Kategórie
Zaujímavé Články