De programmeertaal C biedt verschillende ingebouwde bibliotheekfuncties voor gebruikersinvoer. In dit artikel leren we over sscanf scanf_s fscanf_s sscanf_s bibliotheekfuncties in C.
1. sscanf() Functie in C
sscanf() wordt gebruikt om geformatteerde invoer van de string te lezen. Zowel de functies scanf() als sscanf() zijn vergelijkbaar. Het enige verschil tussen beide is dat de functie scanf() de invoer van de gebruiker leest via standaardinvoer zoals een toetsenbord, en de functie sscanf() de invoer van een string leest en de invoer in een andere string opslaat.
Syntaxis
int sscanf ( const char * str const char * format ...);
Parameters
- Bij succes retourneert de functie het aantal succesvol gelezen waarden.
- In het geval van een invoerfout voordat gegevens met succes kunnen worden gelezen, wordt EOF geretourneerd.
- Bij succes retourneert de functie het aantal gelezen waarden.
- In het geval van een invoerfout voordat gegevens met succes konden worden gelezen, wordt EOF geretourneerd.
- Als de buffergrootte gelijk is aan of kleiner is dan de grootte van de array, zal het invoeren van groter dan of gelijk aan de buffergrootte leiden tot gegevensverlies, omdat de overtollige gegevens worden afgekapt en de gegevens tot buffergrootte - 1 worden gelezen.
- Als de buffergrootte groter is dan de grootte van een array, dan
- het invoeren van een kleinere waarde dan de buffergrootte zal lukken, maar zal een foutmelding geven
- Als u een invoer groter dan de buffergrootte invoert, leidt dit tot bufferoverflow en geeft u dezelfde fout.
- Bij succes retourneert de functie het aantal succesvol gelezen waarden.
- In het geval van een invoerfout voordat gegevens met succes konden worden gelezen, wordt EOF geretourneerd.
- Bij succes retourneert de functie het aantal succesvol gelezen waarden.
- In het geval van een invoerfout voordat gegevens met succes konden worden gelezen, wordt EOF geretourneerd.
Retourwaarde
Opmerking : Er moeten minstens evenveel van deze argumenten zijn als het aantal waarden dat is opgeslagen door de formaatspecificaties.
Voorbeeld: C-programma om de sscanf-functie te illustreren
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; }
Uitvoer
3 blue balls
2. scanf_s() Functie in C
Deze functie is specifiek voor Microsoft-compilers. Het is hetzelfde als scanf, behalve dat het geen bufferoverbelasting veroorzaakt. De functie scanf_s() is veiliger dan de functie scanf() omdat deze een extra parameter biedt om de buffergrootte op te geven die bufferoverloop kan voorkomen.
Syntaxis
int scanf_s (const char *format [argument]...);
Parameters
Opmerking : Hier kunnen we de buffergrootte specificeren en feitelijk de limiet van de invoer controleren, zodat de hele applicatie niet crasht als gevolg van geheugenoverflow.
Retourwaarde
Waarom scanf_s() gebruiken?
scanf leest gewoon de invoer die vanaf de console wordt geleverd. C controleert niet of de gebruikersinvoer past in de variabele die u heeft aangewezen. Als je een array hebt met de naam color[3] en je gebruikt scanf voor de string Red, dan werkt het prima, maar als de gebruiker meer dan 3 tekens invoert, begint scanf te schrijven naar het geheugen dat niet tot de color array behoort.
C zal dit niet opvangen of u waarschuwen en het programma kan wel of niet crashen, afhankelijk van of iets probeert toegang te krijgen tot en te schrijven op dat geheugenslot dat niet tot de color array behoort. Dit is waar scanf_s in het spel komt. scanf_s controleert of de gebruikersinvoer in de gegeven geheugenruimte past.
Opmerking : scanf_s() werkt alleen in Microsoft Visual Studio.
Voorbeeld 1: C-programma om de sscanf_s-functie te illustreren
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; }
Ingang 1
Red
Uitgang 1
Red
Ingang 2
Yellow
Uitgang 2
No Output
Voorbeeld 2: C-programma om de relatie tussen buffergrootte en arraygrootte te illustreren.
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() Functie in C
Het verschil tussen fscanf() en fscanf_s() is hetzelfde als dat tussen scanf() en scanf_s(). fscanf_s() is een beveiligde functie die vereist dat de grootte van elk veld van het type c C s S en [ ] wordt doorgegeven als argument onmiddellijk na de variabele.
Syntaxis
int fscanf_s( FILE *stream const char *format [argument ]... );
Parameters
Opmerking : fscanf_s heeft een extra parameter om de buffergrootte te specificeren en feitelijk de limiet van de invoer te controleren.
Retourwaarde
Opmerking : fscanf_s werkt alleen in MS Visual studio.
Voorbeeld: C-programma om de functie fscanf_s te illustreren
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); }
Uitvoer
concat java-reeks
String1 |Hello| String2 |World| String3 |its| Integer |2017|
4. sscanf_s() Functie in C
sscanf_s() is een beveiligde functie van sscanf() en voor veilige functies is het nodig dat de grootte van elk veld c C s S en [type wordt doorgegeven als argument onmiddellijk na de variabele.
Syntaxis
int sscanf_s (const char * restrict buffer const char * restrict format ...);
Parameters
Opmerking : sscanf_s heeft een extra parameter om de buffergrootte te specificeren en feitelijk de limiet van de invoer te controleren.
Retourwaarde
Opmerking : sscanf_s() werkt alleen in Microsoft Visual Studio.
Voorbeeld: C-programma om de functie sscanf_s te illustreren
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; }
Uitvoer
3 blue balls
Quiz maken