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.
részleges származék latexben
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.
memóriacsere
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
időszak kulcsaKvíz létrehozása