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

    str : Bemeneti karakterlánc, amelyből adatokat szeretnénk kiolvasni. formátum : A típusmeghatározó(ka)t tartalmazó karakterlánc. … (ellipszis) : Azt jelzi, hogy a függvény változó számú argumentumot fogad el.

Visszatérési érték

  • 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.

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

    folyam : Mutasson az adatfolyamot azonosító fájl objektumra. formátum : Ez egy karakterlánc, amely tartalmazza a típusmeghatározó(ka)t. … (ellipszis) : Azt jelzi, hogy a függvény változó számú argumentumot fogad el.

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

  • 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.

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  ;   }   
  • 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.

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

    str : az adatok lekérésére használt karakterlánc formátum : karakterlánc, amely tartalmazza a típusmeghatározó(ka)t … (ellipszis) : Azt jelzi, hogy a függvény változó számú argumentumot fogad el.

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

  • 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.

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

    str : az adatok lekérésére használt karakterlánc formátum : karakterlánc, amely tartalmazza a típusmeghatározó(ka)t … (ellipszis) : Azt jelzi, hogy a függvény változó számú argumentumot fogad el.

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

  • 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.

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