Sisäänrakennetut kirjastotoiminnot käyttäjän Input | sscanf, scanf_s, fscanf_s, sscanf_s
C-ohjelmointikieli tarjoaa erilaisia sisäänrakennettuja kirjastotoimintoja käyttäjän syöttämistä varten. Tässä artikkelissa opimme sscanf scanf_s fscanf_s sscanf_s -kirjastofunktioista C:ssä.
1. sscanf()-funktio C:ssä
sscanf()-komentoa käytetään muotoiltujen syötteiden lukemiseen merkkijonosta. Sekä scanf()- että sscanf()-funktiot ovat samanlaisia, ainoa ero niiden välillä on, että scanf()-funktio lukee syötteen käyttäjältä tavallisesta syötteestä, kuten näppäimistöstä, ja sscanf()-funktio lukee syötteen merkkijonosta ja tallentaa syötteen toiseen merkkijonoon.
Syntaksi
int sscanf ( const char * str const char * format ...);
Parametrit
- Onnistuessaan funktio palauttaa onnistuneesti luettujen arvojen määrän.
- Jos syöttö epäonnistuu, ennen kuin mitään dataa voidaan lukea onnistuneesti, EOF palautetaan.
- Onnistuessaan funktio palauttaa luettujen arvojen määrän.
- Jos syöttö epäonnistuu, ennen kuin mitään dataa on voitu lukea onnistuneesti, EOF palautetaan.
- Jos puskurin koko on yhtä suuri tai pienempi kuin taulukon koko, puskurin kokoa suuremman tai yhtä suuren syöttäminen johtaa tietojen menetykseen, koska ylimääräinen data katkaistaan ja puskurin kokoon - 1 asti ulottuvat tiedot luetaan.
- Jos puskurin koko on suurempi kuin taulukon koko, niin
- puskurin kokoa pienempi syöttäminen onnistuu, mutta antaa virheen
- puskurin kokoa suuremman syöttäminen johtaa puskurin ylivuotoon ja antaa saman virheen.
- Onnistuessaan funktio palauttaa onnistuneesti luettujen arvojen määrän.
- Jos syöttö epäonnistuu, ennen kuin mitään dataa on voitu lukea onnistuneesti, EOF palautetaan.
- Onnistuessaan funktio palauttaa onnistuneesti luettujen arvojen määrän.
- Jos syöttö epäonnistuu, ennen kuin mitään dataa on voitu lukea onnistuneesti, EOF palautetaan.
Palautusarvo
Huom : Näitä argumentteja tulee olla vähintään yhtä monta kuin muotomääritteiden tallentamia arvoja.
Esimerkki: C Ohjelma havainnollistaa sscanf-toimintoa
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 ; }
Lähtö
3 blue balls
2. scanf_s()-funktio C:ssä
Tämä toiminto on tarkoitettu Microsoftin kääntäjille. Se on sama kuin scanf, paitsi että se ei aiheuta puskurin ylikuormitusta. scanf_s()-funktio on turvallisempi kuin scanf()-funktio, koska se tarjoaa lisäparametrin puskurin koon määrittämiseksi, joka voi välttää puskurin ylivuodon.
Syntaksi
int scanf_s (const char *format [argument]...);
Parametrit
Huom : Tässä voimme määrittää puskurin koon ja itse asiassa ohjata syötteen rajaa, jotta koko sovellus ei kaadu muistin ylivuodon vuoksi.
Palautusarvo
Miksi käyttää scanf_s()?
scanf vain lukee mitä tahansa konsolista tulevaa syötettä. C ei tarkista, mahtuuko käyttäjän syöte valitsemaasi muuttujaan. Jos sinulla on taulukko nimeltä color[3] ja käytät scanf-merkkijonolle Red, se toimii hyvin, mutta jos käyttäjä syöttää enemmän kuin 3 merkkiä, scanf alkaa kirjoittaa muistiin, joka ei kuulu väritaulukkoon.
C ei huomaa tätä tai varoita sinua, ja se saattaa kaataa ohjelman riippuen siitä, yrittääkö jokin päästä käsiksi ja kirjoittaa siihen muistipaikkaan, joka ei kuulu väriryhmään. Tässä scanf_s tulee peliin. scanf_s tarkistaa, että käyttäjän syöte mahtuu annettuun muistitilaan.
Huom : scanf_s() toimii vain Microsoft Visual Studiossa.
Esimerkki 1: C Ohjelma, joka havainnollistaa sscanf_s-funktiota
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 ; }
Red
Lähtö 1
Red
Syöte 2
Yellow
Lähtö 2
No Output
Esimerkki 2: C Ohjelma, joka havainnollistaa puskurin koon ja taulukon koon välistä suhdetta.
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. fscanf_s() C:n funktio
Ero fscanf():n ja fscanf_s():n välillä on sama kuin scanf()- ja scanf_s():n välillä. fscanf_s() on suojattu funktio, joka vaatii jokaisen c C s S- ja [ ] -tyyppisen kentän koon välitettävän argumenttina välittömästi muuttujan jälkeen.
Syntaksi
int fscanf_s( FILE *stream const char *format [argument ]... );
Parametrit
Huom : fscanf_s:ssä on ylimääräinen parametri puskurin koon määrittämiseksi ja tulon rajoituksen säätämiseksi.
Palautusarvo
Huom : fscanf_s toimii vain MS Visual studiossa.
Esimerkki: C Ohjelma havainnollistaa fscanf_s-funktiota
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 ); }
Lähtö
String1 |Hello| String2 |World| String3 |its| Integer |2017|
4. sscanf_s()-funktio C:ssä
sscanf_s() on sscanf():n suojattu funktio ja suojausfunktiot edellyttävät, että kunkin c C s S ja [ type -kentän koko välitetään argumenttina välittömästi muuttujan jälkeen.
Syntaksi
int sscanf_s (const char * restrict buffer const char * restrict format ...);
Parametrit
Huom : sscanf_s:ssä on ylimääräinen parametri puskurin koon määrittämiseksi ja tulon rajoituksen säätämiseksi.
Palautusarvo
Huom : sscanf_s() toimii vain Microsoft Visual Studiossa.
Esimerkki: C Ohjelma, joka havainnollistaa sscanf_s-funktiota
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 ; }
Lähtö
3 blue balls
Luo tietokilpailu