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.
pole reťazcov v c
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.
orezanie reťazca javascript
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