Programmeringsspråket C tillhandahåller olika inbyggda biblioteksfunktioner för användarinmatning. I den här artikeln kommer vi att lära oss om sscanf scanf_s fscanf_s sscanf_s biblioteksfunktioner i C.
1. sscanf() Funktion i C
sscanf() används för att läsa formaterad indata från strängen. Både scanf()- och sscanf()-funktionerna liknar den enda skillnaden mellan dem är att scanf()-funktionen läser indata från användaren från standardinmatning som ett tangentbord och sscanf()-funktionen läser indata från en sträng och lagrar indata i en annan sträng.
Syntax
int sscanf ( const char * str const char * format ...);
Parametrar
- Vid framgång returnerar funktionen antalet värden som framgångsrikt lästs.
- I fallet med ett inmatningsfel innan någon data kan läsas framgångsrikt returneras EOF.
- Vid framgång returnerar funktionen antalet lästa värden.
- I fallet med ett inmatningsfel innan någon data kunde läsas framgångsrikt returneras EOF.
- Om buffertstorleken är lika med eller mindre än storleken på arrayen kommer inmatning större än eller lika med buffertstorleken att leda till förlust av data eftersom överskottsdata kommer att trunkeras och data till buffertstorlek - 1 kommer att läsas.
- Om buffertstorleken är större än storleken på en array då
- inmatning som är mindre än buffertstorleken kommer att fungera men ger ett fel
- inmatning större än buffertstorleken kommer att leda till buffertspill och ge samma fel.
- Vid framgång returnerar funktionen antalet värden som lästs framgångsrikt.
- I fallet med ett inmatningsfel innan någon data kunde läsas framgångsrikt returneras EOF.
- Vid framgång returnerar funktionen antalet värden som lästs framgångsrikt.
- I fallet med ett inmatningsfel innan någon data kunde läsas framgångsrikt returneras EOF.
Returvärde
Notera : Det bör finnas minst lika många av dessa argument som antalet värden som lagras av formatspecifikationerna.
Exempel: C Program för att illustrera sscanf-funktionen
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
Den här funktionen är specifik för Microsofts kompilatorer. Det är samma sak som scanf förutom att det inte orsakar buffertöverbelastning. scanf_s()-funktionen är säkrare än scanf()-funktionen eftersom den tillhandahåller en extra parameter för att specificera buffertstorleken som kan undvika buffertspill.
Syntax
int scanf_s (const char *format [argument]...);
Parametrar
Notera : Här kan vi specificera buffertstorleken och faktiskt kontrollera gränsen för ingången så att hela applikationen inte kraschar på grund av minnesspill.
Returvärde
Varför använda scanf_s()?
scanf läser bara vilken indata som tillhandahålls från konsolen. C kontrollerar inte om användarinmatningen passar in i variabeln som du har angett. Om du har en array som heter color[3] och du använder scanf för strängen Red kommer det att fungera bra men om användaren anger mer än 3 tecken börjar scanf skriva in i minnet som inte hör till color array.
C kommer inte att fånga detta eller varna dig och det kanske eller kanske inte kraschar programmet beroende på om något försöker komma åt och skriva på den minnesplatsen som inte tillhör färgarrayen. Det är här scanf_s kommer in i bilden. scanf_s kontrollerar att användarinmatningen får plats i det givna minnesutrymmet.
Notera : scanf_s() fungerar bara i Microsoft Visual Studio.
Exempel 1: C-program för att illustrera 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; }
Ingång 1
Red
Utgång 1
Red
Ingång 2
Yellow
Utgång 2
No Output
Exempel 2: C Program för att illustrera sambandet mellan buffertstorlek och arraystorlek.
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
Skillnaden mellan fscanf() och fscanf_s() är densamma som för scanf() och scanf_s(). fscanf_s() är en säker funktion som kräver att storleken på varje fält av typen c C s S och [ ] skickas som ett argument omedelbart efter variabeln.
java-array till listan
Syntax
int fscanf_s( FILE *stream const char *format [argument ]... );
Parametrar
Notera : fscanf_s har en extra parameter för att specificera buffertstorleken och faktiskt kontrollera gränsen för ingången.
Returvärde
Notera : fscanf_s fungerar endast i MS Visual studio.
Exempel: C Program för att illustrera 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() är en säker funktion av sscanf() och säkra funktioner kräver att storleken på varje c C s S och [ typfält skickas som ett argument omedelbart efter variabeln.
Syntax
int sscanf_s (const char * restrict buffer const char * restrict format ...);
Parametrar
Notera : sscanf_s har en extra parameter för att specificera buffertstorleken och faktiskt kontrollera gränsen för ingången.
Returvärde
Notera : sscanf_s() fungerar bara i Microsoft Visual Studio.
Exempel: C Program för att illustrera 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
Skapa frågesport