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
- 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.
- 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.
- 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.
- 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.
- 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.
Returværdi
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
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
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; }
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
Note : fscanf_s har en ekstra parameter til at specificere bufferstørrelsen og faktisk kontrollere grænsen for input.
Returværdi
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
Note : sscanf_s har en ekstra parameter til at angive bufferstørrelsen og faktisk kontrollere grænsen for input.
Returværdi
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