Programski jezik C ponuja različne vgrajene knjižnične funkcije za uporabniški vnos. V tem članku bomo spoznali funkcije knjižnice sscanf scanf_s fscanf_s sscanf_s v C.
1. Funkcija sscanf() v C
sscanf() se uporablja za branje oblikovanega vnosa iz niza. Obe funkciji scanf() in sscanf() sta podobni, edina razlika med njima je, da funkcija scanf() bere vnos uporabnika iz standardnega vnosa, kot je tipkovnica, funkcija sscanf() pa bere vnos iz niza in shrani vnos v drug niz.
Sintaksa
int sscanf ( const char * str const char * format ...);
Parametri
- Ob uspehu funkcija vrne število uspešno prebranih vrednosti.
- V primeru neuspešnega vnosa, preden je mogoče kateri koli podatek uspešno prebrati, se vrne EOF.
- Ob uspehu funkcija vrne število prebranih vrednosti.
- V primeru neuspešnega vnosa, preden je bilo mogoče uspešno prebrati podatke, se vrne EOF.
- Če je velikost medpomnilnika večja od velikosti matrike, potem
- vnos, manjši od velikosti vmesnega pomnilnika, bo deloval, vendar bo povzročil napako
- vnos, ki je večji od velikosti vmesnega pomnilnika, bo povzročil prepolnitev medpomnilnika in povzročil enako napako.
- Ob uspehu funkcija vrne število uspešno prebranih vrednosti.
- V primeru neuspešnega vnosa, preden je bilo mogoče uspešno prebrati podatke, se vrne EOF.
- Ob uspehu funkcija vrne število uspešno prebranih vrednosti.
- V primeru neuspešnega vnosa, preden je bilo mogoče uspešno prebrati podatke, se vrne EOF.
Povratna vrednost
Opomba : teh argumentov mora biti vsaj toliko, kot je število vrednosti, ki jih shranijo specifikatorji formata.
Primer: program C za ponazoritev funkcije 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; }
Izhod
3 blue balls
2. funkcija scanf_s() v C
Ta funkcija je specifična za Microsoftove prevajalnike. Je enak scanf, le da ne povzroči preobremenitve medpomnilnika. Funkcija scanf_s() je varnejša od funkcije scanf(), saj zagotavlja dodaten parameter za določanje velikosti medpomnilnika, s katerim se lahko izognete prepolnitvi medpomnilnika.
primerljiv niz v Javi
Sintaksa
int scanf_s (const char *format [argument]...);
Parametri
Opomba : Tukaj lahko določimo velikost medpomnilnika in dejansko nadziramo omejitev vnosa, tako da se celotna aplikacija ne zruši zaradi prepolnitve pomnilnika.
Povratna vrednost
Zakaj uporabljati scanf_s()?
scanf samo prebere kateri koli vnos, ki je na voljo s konzole. C ne preveri, ali bo uporabniški vnos ustrezal spremenljivki, ki ste jo določili. Če imate matriko z imenom color[3] in uporabite scanf za niz Red, bo delovalo dobro, če pa uporabnik vnese več kot 3 znake, začne scanf pisati v pomnilnik, ki ne pripada barvni matriki.
C tega ne bo ujel ali vas opozoril in morda bo zrušil program ali pa tudi ne, odvisno od tega, ali poskuša nekaj dostopati in pisati v to pomnilniško režo, ki ne pripada barvnemu nizu. Tukaj nastopi scanf_s. scanf_s preveri, ali bo uporabniški vnos ustrezal danemu pomnilniškemu prostoru.
Opomba : scanf_s() bo deloval samo v Microsoft Visual Studio.
Primer 1: Program C za ponazoritev funkcije 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; }
Vnos 1
velikost vektorja c++
Red
Izhod 1
Red
Vnos 2
Yellow
No Output
Primer 2: Program C za ponazoritev razmerja med velikostjo medpomnilnika in velikostjo polja.
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. Funkcija fscanf_s() v C
Razlika med fscanf() in fscanf_s() je enaka kot pri scanf() in scanf_s(). fscanf_s() je varna funkcija, ki zahteva, da se velikost vsakega polja tipa c C s S in [] posreduje kot argument takoj za spremenljivko.
Sintaksa
int fscanf_s( FILE *stream const char *format [argument ]... );
Parametri
Opomba : fscanf_s ima dodaten parameter za določanje velikosti vmesnega pomnilnika in dejansko nadzor nad omejitvijo vnosa.
razlika med gigabajtom in megabajtom
Povratna vrednost
Opomba : fscanf_s bo deloval samo v MS Visual studiu.
Primer: program C za ponazoritev funkcije 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); }
Izhod
String1 |Hello| String2 |World| String3 |its| Integer |2017|
4. Funkcija sscanf_s() v C
sscanf_s() je varna funkcija sscanf() in varne funkcije zahtevajo, da se velikost vsakega polja tipa c C s S in [ posreduje kot argument takoj za spremenljivko.
okno.odpri javascript
Sintaksa
int sscanf_s (const char * restrict buffer const char * restrict format ...);
Parametri
Opomba : sscanf_s ima dodaten parameter za določanje velikosti vmesnega pomnilnika in dejansko nadzor nad omejitvijo vnosa.
Povratna vrednost
Opomba : sscanf_s() bo deloval le v Microsoft Visual Studio.
Primer: program C za ponazoritev funkcije 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; }
Izhod
3 blue balls
Ustvari kviz