Beépített könyvtári funkciók a felhasználói bevitelhez | sscanf, scanf_s, fscanf_s, sscanf_s
A C programozási nyelv különféle beépített könyvtári funkciókat biztosít a felhasználói bevitelhez. Ebben a cikkben megismerjük az sscanf scanf_s fscanf_s sscanf_s könyvtári függvényeket C-ben.
1. sscanf() függvény C-ben
Az sscanf() a formázott bemenet kiolvasására szolgál a karakterláncból. A scanf() és az sscanf() függvények is hasonlóak, az egyetlen különbség közöttük az, hogy a scanf() függvény beolvassa a felhasználó bemenetét a szokásos bemenetről, például egy billentyűzetről, az sscanf() függvény pedig egy karakterláncból olvassa be a bemenetet, és a bemenetet egy másik karakterláncban tárolja.
Szintaxis
int sscanf ( const char * str const char * format ...);
Paraméterek
- Siker esetén a függvény a sikeresen beolvasott értékek számát adja vissza.
- Bemeneti hiba esetén, mielőtt bármilyen adatot sikeresen le lehetne olvasni, az EOF visszaadásra kerül.
- Siker esetén a függvény visszaadja a beolvasott értékek számát.
- Bemeneti hiba esetén az adatok sikeres olvasása előtt az EOF visszaadásra kerül.
- Ha a puffer mérete egyenlő vagy kisebb, mint a tömb mérete, akkor a pufferméretnél nagyobb vagy azzal egyenlő bevitel adatvesztéshez vezet, mivel a felesleges adatok csonkolódnak, és a pufferméret - 1-ig tartó adatok beolvasásra kerülnek.
- Ha a puffer mérete nagyobb, mint egy tömb mérete, akkor
- a pufferméretnél kisebb bevitel működni fog, de hibát jelez
- a puffer méreténél nagyobb bevitel puffer túlcsorduláshoz vezet, és ugyanazt a hibát adja.
- Siker esetén a függvény a sikeresen beolvasott értékek számát adja vissza.
- Bemeneti hiba esetén az adatok sikeres olvasása előtt az EOF visszaadásra kerül.
- Siker esetén a függvény a sikeresen beolvasott értékek számát adja vissza.
- Bemeneti hiba esetén az adatok sikeres olvasása előtt az EOF visszaadásra kerül.
Visszatérési érték
Jegyzet : Legalább annyi argumentumnak kell lennie, ahány értéket tárolnak a formátum-specifikátorok.
Példa: C Az sscanf függvény illusztrálására szolgáló program
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 ; }
Kimenet
3 blue balls
2. scanf_s() függvény C-ben
Ez a funkció a Microsoft fordítóira jellemző. Ez ugyanaz, mint a scanf, kivéve, hogy nem okoz puffer túlterhelést. A scanf_s() függvény biztonságosabb, mint a scanf() függvény, mivel egy további paramétert biztosít a puffer méretének meghatározásához, amellyel elkerülhető a puffer túlcsordulása.
Szintaxis
int scanf_s (const char *format [argument]...);
Paraméterek
Jegyzet : Itt megadhatjuk a puffer méretét és ténylegesen szabályozhatjuk a bemenet korlátját, hogy az egész alkalmazás ne omoljon le a memória túlcsordulás miatt.
Visszatérési érték
Miért érdemes a scanf_s()-t használni?
A scanf csak beolvassa a konzolról érkező bemenetet. A C nem ellenőrzi, hogy a felhasználói bevitel belefér-e az Ön által megadott változóba. Ha van egy color[3] nevű tömböd, és a Red karakterlánchoz scanf-et használsz, akkor jól fog működni, de ha a felhasználó 3-nál több karaktert ír be, a scanf elkezd írni a memóriába, amely nem tartozik a színtömbhöz.
A C nem fogja ezt, és nem figyelmezteti Önt, és előfordulhat, hogy összeomlik a program, attól függően, hogy valami megpróbál-e hozzáférni és írni azt a memóriahelyet, amely nem tartozik a színtömbhöz. Itt jön képbe a scanf_s. A scanf_s ellenőrzi, hogy a felhasználói bevitel elfér-e az adott memóriaterületen.
Jegyzet : scanf_s() csak a Microsoft Visual Studióban fog működni.
1. példa: C Program az sscanf_s függvény illusztrálására
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 ; }
1. bemenet
Red
1. kimenet
Red
2. bemenet
Yellow
2. kimenet
No Output
2. példa: C Program a puffer mérete és a tömb mérete közötti összefüggés szemléltetésére.
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() függvény C-ben
Az fscanf() és az fscanf_s() közötti különbség ugyanaz, mint a scanf() és scanf_s() között. Az fscanf_s() egy biztonságos függvény, amely megköveteli, hogy minden c C s S és [ ] típusú mező mérete argumentumként kerüljön átadásra közvetlenül a változó után.
Szintaxis
int fscanf_s( FILE *stream const char *format [argument ]... );
Paraméterek
Jegyzet : Az fscanf_s rendelkezik egy extra paraméterrel a puffer méretének meghatározására és a bemenet korlátjának szabályozására.
Visszatérési érték
Jegyzet : Az fscanf_s csak az MS Visual stúdióban fog működni.
Példa: C Program az fscanf_s függvény illusztrálására
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 ); }
Kimenet
String1 |Hello| String2 |World| String3 |its| Integer |2017|
4. sscanf_s() függvény C-ben
Az sscanf_s() az sscanf() biztonságos függvénye, és a biztonságos függvényekhez minden c C s S és [ type mező méretét argumentumként kell átadni közvetlenül a változó után.
Szintaxis
int sscanf_s (const char * restrict buffer const char * restrict format ...);
Paraméterek
Jegyzet : sscanf_s rendelkezik egy extra paraméterrel, amely megadja a puffer méretét és ténylegesen szabályozza a bemenet korlátját.
Visszatérési érték
Jegyzet : sscanf_s() csak a Microsoft Visual Studióban fog működni.
Példa: C Az sscanf_s függvény illusztrálására szolgáló program
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 ; }
Kimenet
3 blue balls
Kvíz létrehozása