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.
mikä on näyttöni koko
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; }
apache
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.
muistin vaihto
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.
muuntaa merkkijonon merkiksi
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