logo

Innebygde bibliotekfunksjoner for brukerinngang | sscanf, scanf_s, fscanf_s, sscanf_s

C-programmeringsspråket gir forskjellige innebygde bibliotekfunksjoner for brukerinndata. I denne artikkelen vil vi lære om sscanf scanf_s fscanf_s sscanf_s bibliotekfunksjoner i C.

1. sscanf()-funksjon i C

sscanf() brukes til å lese formatert inndata fra strengen. Både scanf()- og sscanf()-funksjonene er like, den eneste forskjellen mellom dem er at scanf()-funksjonen leser inndata fra brukeren fra standardinndata som et tastatur og sscanf()-funksjonen leser inndata fra en streng og lagrer inngangen i en annen streng.

Syntaks

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

Parametere

    str: Inndatastreng som vi ønsker å lese data fra.format: En streng som inneholder typespesifikatoren(e).… (ellipsis): Det indikerer at funksjonen godtar et variabelt antall argumenter.

Returverdi

  • Ved suksess returnerer funksjonen antall verdier som er lest.
  • I tilfelle en inndatafeil før noen data kan leses med hell, returneres EOF.

Note : Det bør være minst like mange av disse argumentene som antallet verdier lagret av formatspesifikasjonene.



Eksempel: C Program for å illustrere sscanf-funksjonen

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

Produksjon
3 blue balls 

2. scanf_s() funksjon i C

Denne funksjonen er spesifikk for Microsoft-kompilatorer. Det er det samme som scanf, bortsett fra at det ikke forårsaker bufferoverbelastning. scanf_s()-funksjonen er sikrere enn scanf()-funksjonen da den gir en ekstra parameter for å spesifisere bufferstørrelsen som kan unngå bufferoverløp.

Syntaks

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

Parametere

    strøm: Peker til File-objektet som identifiserer strømmen.format: Det er en streng som inneholder typespesifikatoren(e).… (ellipsis): Det indikerer at funksjonen godtar et variabelt antall argumenter.

Note : Her kan vi spesifisere bufferstørrelsen og faktisk kontrollere grensen for inngangen slik at hele applikasjonen ikke krasjer på grunn av minneoverflyt.

Returverdi

  • Ved suksess returnerer funksjonen antall verdier som er lest.
  • I tilfelle en inndatafeil før noen data kunne leses med hell, returneres EOF.

Hvorfor bruke scanf_s()?

scanf leser bare det som er gitt fra konsollen. C sjekker ikke om brukerinndata vil passe inn i variabelen du har angitt. Hvis du har en matrise som heter color[3] og du bruker scanf for strengen Red, vil det fungere fint, men hvis brukeren skriver inn mer enn 3 tegn, begynner scanf å skrive inn i minnet som ikke tilhører color array.

C vil ikke fange dette eller advare deg, og det kan kanskje eller ikke krasjer programmet avhengig av om noe prøver å få tilgang til og skrive på det minnesporet som ikke tilhører color array. Det er her scanf_s kommer inn i bildet. scanf_s sjekker at brukerinndata vil passe i den gitte minneplassen.

Note : scanf_s() vil bare fungere i Microsoft Visual Studio.

Eksempel 1: C-program for å illustrere sscanf_s funksjon

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


Inngang 1

Red

Utgang 1

Red

Inngang 2

Yellow

Utgang 2

No Output

Eksempel 2: C Program for å illustrere forholdet mellom bufferstørrelse og matrisestørrelse.

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; } 
  • Hvis bufferstørrelsen er lik eller mindre enn størrelsen på matrisen, vil inntasting større enn eller lik bufferstørrelsen føre til tap av data ettersom overflødig data vil bli avkortet og dataene til bufferstørrelse - 1 vil bli lest.
  • Hvis bufferstørrelsen er større enn størrelsen på en matrise da
    • å legge inn mindre enn bufferstørrelsen vil fungere, men vil gi en feil
    • inntasting større enn bufferstørrelse vil føre til bufferoverløp og gi samme feil.

3. fscanf_s() funksjon i C

Forskjellen mellom fscanf() og fscanf_s() er den samme som for scanf() og scanf_s(). fscanf_s() er sikker funksjon som krever at størrelsen på hvert c C s S og [ ] typefelt sendes som et argument umiddelbart etter variabelen.

Syntaks

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

Parametere

    str: streng som brukes til å hente dataformat: streng som inneholder typespesifikatoren(e)… (ellipsis): Det indikerer at funksjonen godtar et variabelt antall argumenter.

Note : fscanf_s har en ekstra parameter for å spesifisere bufferstørrelsen og faktisk kontrollere grensen for inngangen.

Returverdi

  • Ved suksess returnerer funksjonen antall verdier som er lest vellykket.
  • I tilfelle en inndatafeil før noen data kunne leses med hell, returneres EOF.

Note : fscanf_s vil bare fungere i MS Visual studio.

Eksempel: C Program for å illustrere fscanf_s funksjon

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


Produksjon

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

4. sscanf_s() funksjon i C

sscanf_s() er sikker funksjon av sscanf() og sikre funksjoner krever at størrelsen på hvert c C s S og [ type felt sendes som et argument umiddelbart etter variabelen.

Syntaks

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

Parametere

    str: streng som brukes til å hente dataformat: streng som inneholder typespesifikatoren(e)… (ellipsis): Det indikerer at funksjonen godtar et variabelt antall argumenter.

Note : sscanf_s har en ekstra parameter for å spesifisere bufferstørrelsen og faktisk kontrollere grensen for inngangen.

Returverdi

  • Ved suksess returnerer funksjonen antall verdier som er lest vellykket.
  • I tilfelle en inndatafeil før noen data kunne leses med hell, returneres EOF.

Note : sscanf_s() vil bare fungere i Microsoft Visual Studio.

Eksempel: C Program for å illustrere sscanf_s funksjon

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


Produksjon

3 blue balls

Lag quiz