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
- Ved suksess returnerer funksjonen antall verdier som er lest.
- I tilfelle en inndatafeil før noen data kan leses med hell, returneres EOF.
- Ved suksess returnerer funksjonen antall verdier som er lest.
- I tilfelle en inndatafeil før noen data kunne leses med hell, returneres EOF.
- 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.
- Ved suksess returnerer funksjonen antall verdier som er lest vellykket.
- I tilfelle en inndatafeil før noen data kunne leses med hell, returneres EOF.
- Ved suksess returnerer funksjonen antall verdier som er lest vellykket.
- I tilfelle en inndatafeil før noen data kunne leses med hell, returneres EOF.
Returverdi
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
Note : Her kan vi spesifisere bufferstørrelsen og faktisk kontrollere grensen for inngangen slik at hele applikasjonen ikke krasjer på grunn av minneoverflyt.
Returverdi
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; }
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
Note : fscanf_s har en ekstra parameter for å spesifisere bufferstørrelsen og faktisk kontrollere grensen for inngangen.
Returverdi
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
Note : sscanf_s har en ekstra parameter for å spesifisere bufferstørrelsen og faktisk kontrollere grensen for inngangen.
Returverdi
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