logo

Vgrajene knjižnične funkcije za uporabniški vnos | sscanf, scanf_s, fscanf_s, sscanf_s

Programski jezik C ponuja različne vgrajene knjižnične funkcije za uporabniški vnos. V tem članku bomo spoznali funkcije knjižnice sscanf scanf_s fscanf_s sscanf_s v C.

1. Funkcija sscanf() v C

sscanf() se uporablja za branje oblikovanega vnosa iz niza. Obe funkciji scanf() in sscanf() sta podobni, edina razlika med njima je, da funkcija scanf() bere vnos uporabnika iz standardnega vnosa, kot je tipkovnica, funkcija sscanf() pa bere vnos iz niza in shrani vnos v drug niz.

Sintaksa

int   sscanf   ( const char *   str   const char *   format   ...);

Parametri

    str: Vnosni niz, iz katerega želimo prebrati podatke.format: Niz, ki vsebuje specifikator(e) vrste.… (elipsa)

Povratna vrednost

  • Ob uspehu funkcija vrne število uspešno prebranih vrednosti.
  • V primeru neuspešnega vnosa, preden je mogoče kateri koli podatek uspešno prebrati, se vrne EOF.

Opomba : teh argumentov mora biti vsaj toliko, kot je število vrednosti, ki jih shranijo specifikatorji formata.



Primer: program C za ponazoritev funkcije sscanf

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

Izhod
3 blue balls 

2. funkcija scanf_s() v C

Ta funkcija je specifična za Microsoftove prevajalnike. Je enak scanf, le da ne povzroči preobremenitve medpomnilnika. Funkcija scanf_s() je varnejša od funkcije scanf(), saj zagotavlja dodaten parameter za določanje velikosti medpomnilnika, s katerim se lahko izognete prepolnitvi medpomnilnika.

primerljiv niz v Javi

Sintaksa

int   scanf_s  (const char *format [argument]...);

Parametri

    tok: Kazalec na predmet File, ki identificira tok.format: To je niz, ki vsebuje specifikator(e) vrste.… (elipsa): Označuje, da funkcija sprejema spremenljivo število argumentov.

Opomba : Tukaj lahko določimo velikost medpomnilnika in dejansko nadziramo omejitev vnosa, tako da se celotna aplikacija ne zruši zaradi prepolnitve pomnilnika.

Povratna vrednost

  • Ob uspehu funkcija vrne število prebranih vrednosti.
  • V primeru neuspešnega vnosa, preden je bilo mogoče uspešno prebrati podatke, se vrne EOF.

Zakaj uporabljati scanf_s()?

scanf samo prebere kateri koli vnos, ki je na voljo s konzole. C ne preveri, ali bo uporabniški vnos ustrezal spremenljivki, ki ste jo določili. Če imate matriko z imenom color[3] in uporabite scanf za niz Red, bo delovalo dobro, če pa uporabnik vnese več kot 3 znake, začne scanf pisati v pomnilnik, ki ne pripada barvni matriki.

C tega ne bo ujel ali vas opozoril in morda bo zrušil program ali pa tudi ne, odvisno od tega, ali poskuša nekaj dostopati in pisati v to pomnilniško režo, ki ne pripada barvnemu nizu. Tukaj nastopi scanf_s. scanf_s preveri, ali bo uporabniški vnos ustrezal danemu pomnilniškemu prostoru.

Opomba : scanf_s() bo deloval samo v Microsoft Visual Studio.

Primer 1: Program C za ponazoritev funkcije sscanf_s

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


Vnos 1

velikost vektorja c++
Red

Izhod 1

Red

Vnos 2

Yellow

No Output

Primer 2: Program C za ponazoritev razmerja med velikostjo medpomnilnika in velikostjo polja.

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; } 
  • Če je velikost medpomnilnika večja od velikosti matrike, potem
    • vnos, manjši od velikosti vmesnega pomnilnika, bo deloval, vendar bo povzročil napako
    • vnos, ki je večji od velikosti vmesnega pomnilnika, bo povzročil prepolnitev medpomnilnika in povzročil enako napako.

3. Funkcija fscanf_s() v C

Razlika med fscanf() in fscanf_s() je enaka kot pri scanf() in scanf_s(). fscanf_s() je varna funkcija, ki zahteva, da se velikost vsakega polja tipa c C s S in [] posreduje kot argument takoj za spremenljivko.

Sintaksa

int fscanf_s( FILE *stream const char *format [argument ]... );

Parametri

    str: niz, ki se uporablja za pridobivanje podatkovformat: niz, ki vsebuje specifikatorje vrste… (elipsa): Označuje, da funkcija sprejema spremenljivo število argumentov.

Opomba : fscanf_s ima dodaten parameter za določanje velikosti vmesnega pomnilnika in dejansko nadzor nad omejitvijo vnosa.

razlika med gigabajtom in megabajtom

Povratna vrednost

  • Ob uspehu funkcija vrne število uspešno prebranih vrednosti.
  • V primeru neuspešnega vnosa, preden je bilo mogoče uspešno prebrati podatke, se vrne EOF.

Opomba : fscanf_s bo deloval samo v MS Visual studiu.

Primer: program C za ponazoritev funkcije fscanf_s

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); } 


Izhod

String1 |Hello| String2 |World| String3 |its| Integer |2017|

4. Funkcija sscanf_s() v C

sscanf_s() je varna funkcija sscanf() in varne funkcije zahtevajo, da se velikost vsakega polja tipa c C s S in [ posreduje kot argument takoj za spremenljivko.

okno.odpri javascript

Sintaksa

int   sscanf_s  (const char *  restrict buffer   const char *  restrict format   ...);

Parametri

    str: niz, ki se uporablja za pridobivanje podatkovformat: niz, ki vsebuje specifikatorje vrste… (elipsa): Označuje, da funkcija sprejema spremenljivo število argumentov.

Opomba : sscanf_s ima dodaten parameter za določanje velikosti vmesnega pomnilnika in dejansko nadzor nad omejitvijo vnosa.

Povratna vrednost

  • Ob uspehu funkcija vrne število uspešno prebranih vrednosti.
  • V primeru neuspešnega vnosa, preden je bilo mogoče uspešno prebrati podatke, se vrne EOF.

Opomba : sscanf_s() bo deloval le v Microsoft Visual Studio.

Primer: program C za ponazoritev funkcije sscanf_s

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


Izhod

3 blue balls

Ustvari kviz