logo

Indbyggede biblioteksfunktioner til brugerinput | sscanf, scanf_s, fscanf_s, sscanf_s

C-programmeringssproget giver forskellige indbyggede biblioteksfunktioner til brugerinput. I denne artikel lærer vi om sscanf scanf_s fscanf_s sscanf_s biblioteksfunktioner i C.

1. sscanf() Funktion i C

sscanf() bruges til at læse formateret input fra strengen. Både scanf()- og sscanf()-funktionerne ligner hinanden, den eneste forskel mellem dem er, at scanf()-funktionen læser input fra brugeren fra standardinput som et tastatur og sscanf()-funktionen læser input fra en streng og gemmer inputtet i en anden streng.

Syntaks

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

Parametre

    str: Indtastningsstreng, som vi ønsker at læse data fra.format: En streng, der indeholder typespecifikationen(e).… (ellipsis): Det angiver, at funktionen accepterer et variabelt antal argumenter.

Returværdi

  • Ved succes returnerer funktionen antallet af læste værdier.
  • I tilfælde af en inputfejl, før nogen data kan læses med succes, returneres EOF.

Note : Der bør være mindst lige så mange af disse argumenter som antallet af værdier gemt af formatspecifikationerne.



Eksempel: C Program til at illustrere sscanf-funktion

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

Produktion
3 blue balls 

2. scanf_s() Funktion i C

Denne funktion er specifik for Microsoft-kompilere. Det er det samme som scanf, bortset fra at det ikke forårsager bufferoverbelastning. scanf_s()-funktionen er mere sikker end scanf()-funktionen, da den giver en ekstra parameter til at specificere bufferstørrelsen, der kan undgå bufferoverløb.

Syntaks

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

Parametre

    strøm: Pejler til File-objektet, der identificerer strømmen.format: Det er en streng, der indeholder typespecifikationen(e).… (ellipsis): Det angiver, at funktionen accepterer et variabelt antal argumenter.

Note : Her kan vi angive bufferstørrelsen og faktisk kontrollere grænsen for input, så hele applikationen ikke går ned på grund af hukommelsesoverløb.

Returværdi

  • Ved succes returnerer funktionen antallet af læste værdier.
  • I tilfælde af en inputfejl, før nogen data kunne læses med succes, returneres EOF.

Hvorfor bruge scanf_s()?

scanf læser bare det input, der leveres fra konsollen. C tjekker ikke, om brugerinputtet passer ind i den variabel, du har udpeget. Hvis du har et array kaldet color[3], og du bruger scanf til strengen Rød, vil det fungere fint, men hvis brugeren indtaster mere end 3 tegn, begynder scanf at skrive ind i hukommelsen, der ikke hører til farvearray.

C vil ikke fange dette eller advare dig, og det kan eller måske ikke nedbryde programmet afhængigt af, om noget forsøger at få adgang til og skrive på den hukommelsesplads, der ikke hører til farvearrayet. Det er her scanf_s kommer ind i billedet. scanf_s kontrollerer, at brugerinputtet passer i det givne hukommelsesrum.

Note : scanf_s() virker kun i Microsoft Visual Studio.

Eksempel 1: C-program til at illustrere sscanf_s funktion

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


Indgang 1

Red

Udgang 1

Red

Indgang 2

Yellow

Udgang 2

No Output

Eksempel 2: C Program til at illustrere sammenhængen mellem bufferstørrelse og matrixstø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 lig med eller mindre end størrelsen af ​​arrayet, vil indtastning større end eller lig med bufferstørrelsen føre til tab af data, da de overskydende data vil blive trunkeret, og dataene indtil bufferstørrelse - 1 vil blive læst.
  • Hvis bufferstørrelsen er større end størrelsen af ​​et array, så
    • indtastning mindre end bufferstørrelsen vil fungere, men vil give en fejl
    • indtastning større end bufferstørrelse vil føre til bufferoverløb og give samme fejl.

3. fscanf_s() Funktion i C

Forskellen mellem fscanf() og fscanf_s() er den samme som for scanf() og scanf_s(). fscanf_s() er sikker funktion, der kræver, at størrelsen af ​​hvert felt af typen c C s S og [ ] sendes som et argument umiddelbart efter variablen.

Syntaks

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

Parametre

    str: streng, der bruges til at hente dataformat: streng, der indeholder typespecifikationen(e)… (ellipsis): Det angiver, at funktionen accepterer et variabelt antal argumenter.

Note : fscanf_s har en ekstra parameter til at specificere bufferstørrelsen og faktisk kontrollere grænsen for input.

Returværdi

  • Ved succes returnerer funktionen antallet af læste værdier.
  • I tilfælde af en inputfejl, før nogen data kunne læses med succes, returneres EOF.

Note : fscanf_s fungerer kun i MS Visual studio.

Eksempel: C Program til at illustrere fscanf_s funktion

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


Produktion

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

4. sscanf_s() Funktion i C

sscanf_s() er sikker funktion af sscanf() og sikre funktioner kræver, at størrelsen af ​​hvert c C s S og [ type felt sendes som et argument umiddelbart efter variablen.

Syntaks

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

Parametre

    str: streng, der bruges til at hente dataformat: streng, der indeholder typespecifikationen(e)… (ellipsis): Det angiver, at funktionen accepterer et variabelt antal argumenter.

Note : sscanf_s har en ekstra parameter til at angive bufferstørrelsen og faktisk kontrollere grænsen for input.

Returværdi

  • Ved succes returnerer funktionen antallet af læste værdier.
  • I tilfælde af en inputfejl, før nogen data kunne læses med succes, returneres EOF.

Note : sscanf_s() virker kun i Microsoft Visual Studio.

Eksempel: C Program til at illustrere sscanf_s funktion

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


Produktion

3 blue balls

Opret quiz