Limbajul de programare C oferă diverse funcții de bibliotecă încorporate pentru introducerea utilizatorului. În acest articol vom afla despre funcțiile bibliotecii sscanf scanf_s fscanf_s sscanf_s în C.
1. Funcția sscanf() în C
sscanf() este folosit pentru a citi intrarea formatată din șir. Ambele funcții scanf() și sscanf() sunt similare, singura diferență dintre ele este că funcția scanf() citește intrarea de la utilizator de la intrarea standard, cum ar fi o tastatură, iar funcția sscanf() citește intrarea dintr-un șir și stochează intrarea într-un alt șir.
șir de convertor până în prezent
Sintaxă
int sscanf ( const char * str const char * format ...);
Parametrii
- La succes, funcția returnează numărul de valori citite cu succes.
- În cazul unei erori de intrare înainte ca orice date să poată fi citite cu succes, este returnat EOF.
- La succes, funcția returnează numărul de valori citite.
- În cazul unei erori de intrare înainte ca orice date să poată fi citite cu succes, este returnat EOF.
- Dacă dimensiunea tamponului este egală sau mai mică decât dimensiunea matricei, atunci introducerea unei dimensiuni mai mari sau egale cu dimensiunea tamponului va duce la pierderea datelor, deoarece datele în exces vor fi trunchiate și datele până la dimensiunea tamponului - 1 vor fi citite.
- Dacă dimensiunea tamponului este mai mare decât dimensiunea unui tablou, atunci
- introducerea unei dimensiuni mai mici decât dimensiunea tamponului va funcționa, dar va da o eroare
- introducerea unei dimensiuni mai mari decât dimensiunea bufferului va duce la depășirea tamponului și va produce aceeași eroare.
- La succes, funcția returnează numărul de valori citite cu succes.
- În cazul unei erori de intrare înainte ca orice date să poată fi citite cu succes, este returnat EOF.
- La succes, funcția returnează numărul de valori citite cu succes.
- În cazul unei erori de intrare înainte ca orice date să poată fi citite cu succes, este returnat EOF.
Valoarea returnată
Nota : Ar trebui să existe cel puțin la fel de multe dintre aceste argumente cât numărul de valori stocate de specificatorii de format.
Exemplu: Program C pentru a ilustra funcția 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; }
Ieșire
3 blue balls
2. Funcția scanf_s() în C
Această funcție este specifică compilatoarelor Microsoft. Este la fel ca scanf, cu excepția faptului că nu provoacă supraîncărcare tampon. Funcția scanf_s() este mai sigură decât funcția scanf() deoarece oferă un parametru suplimentar pentru a specifica dimensiunea buffer-ului care poate evita depășirea tamponului.
Sintaxă
int scanf_s (const char *format [argument]...);
Parametrii
Nota : Aici putem specifica dimensiunea buffer-ului și de fapt controlăm limita intrării, astfel încât întreaga aplicație să nu se blocheze din cauza depășirii memoriei.
Valoarea returnată
De ce să folosiți scanf_s()?
scanf doar citește orice intrare este furnizată de la consolă. C nu verifică dacă intrarea utilizatorului se va potrivi în variabila pe care ați desemnat-o. Dacă aveți o matrice numită color[3] și utilizați scanf pentru șirul Roșu, va funcționa bine, dar dacă utilizatorul introduce mai mult de 3 caractere, scanf începe să scrie în memorie care nu aparține matricei de culoare.
C nu va prinde acest lucru și nu vă va avertiza și ar putea sau nu să blocheze programul, în funcție de dacă ceva încearcă să acceseze și să scrie pe acel slot de memorie care nu aparține matricei de culori. Aici intervine scanf_s. scanf_s verifică dacă intrarea utilizatorului se va încadra în spațiul de memorie dat.
Nota : scanf_s() va funcționa numai în Microsoft Visual Studio.
Exemplul 1: Programul C pentru a ilustra funcția 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; }
Intrarea 1
Red
Ieșire 1
Red
Intrarea 2
Yellow
Ieșirea 2
img css align
No Output
Exemplul 2: Programul C pentru a ilustra relația dintre dimensiunea tamponului și dimensiunea matricei.
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. Funcția fscanf_s() în C
Diferența dintre fscanf() și fscanf_s() este aceeași cu cea a scanf() și scanf_s(). fscanf_s() este o funcție securizată care necesită ca dimensiunea fiecărui câmp de tip c C s S și [ ] să fie transmisă ca argument imediat după variabilă.
Sintaxă
int fscanf_s( FILE *stream const char *format [argument ]... );
Parametrii
Nota : fscanf_s are un parametru suplimentar pentru a specifica dimensiunea tamponului și pentru a controla de fapt limita de intrare.
Valoarea returnată
Nota : fscanf_s va funcționa numai în studioul MS Visual.
Exemplu: Program C pentru a ilustra funcția 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); }
Ieșire
String1 |Hello| String2 |World| String3 |its| Integer |2017|
4. Funcția sscanf_s() în C
sscanf_s() este funcția securizată a lui sscanf(), iar funcțiile securizate necesită ca dimensiunea fiecărui câmp de tip c C s S și [ să fie transmisă ca argument imediat după variabilă.
Sintaxă
int sscanf_s (const char * restrict buffer const char * restrict format ...);
Parametrii
Nota : sscanf_s are un parametru suplimentar pentru a specifica dimensiunea bufferului și pentru a controla efectiv limita intrării.
Valoarea returnată
Nota : sscanf_s() va funcționa numai în Microsoft Visual Studio.
Exemplu: Program C pentru a ilustra funcția 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; }
Ieșire
3 blue balls
Creați un test