El llenguatge de programació C proporciona diverses funcions de biblioteca integrades per a l'entrada de l'usuari. En aquest article aprendrem sobre les funcions de biblioteca sscanf scanf_s fscanf_s sscanf_s en C.
1. Funció sscanf() en C
sscanf() s'utilitza per llegir l'entrada amb format de la cadena. Tant les funcions scanf() com sscanf() són similars, l'única diferència entre elles és que la funció scanf() llegeix l'entrada de l'usuari des de l'entrada estàndard com un teclat i la funció sscanf() llegeix l'entrada d'una cadena i emmagatzema l'entrada en una altra cadena.
Sintaxi
int sscanf ( const char * str const char * format ...);
Paràmetres
- En cas d'èxit, la funció retorna el nombre de valors llegits correctament.
- En el cas d'un error d'entrada abans que qualsevol dada es pugui llegir correctament, es retorna l'EOF.
- En cas d'èxit, la funció retorna el nombre de valors llegits.
- En el cas d'un error d'entrada abans que qualsevol dada es pugui llegir correctament, es retorna l'EOF.
- Si la mida de la memòria intermèdia és igual o menor que la mida de la matriu, introduir una mida superior o igual a la memòria intermèdia comportarà la pèrdua de dades, ja que l'excés de dades es truncarà i es llegiran les dades fins a la mida de la memòria intermèdia - 1.
- Si la mida del buffer és més gran que la mida d'una matriu, aleshores
- introduir una mida més petita que la memòria intermèdia funcionarà, però donarà un error
- introduir una mida més gran que la memòria intermèdia provocarà un desbordament de la memòria intermèdia i donarà el mateix error.
- En cas d'èxit, la funció retorna el nombre de valors llegits correctament.
- En el cas d'un error d'entrada abans que qualsevol dada es pugui llegir correctament, es retorna l'EOF.
- En cas d'èxit, la funció retorna el nombre de valors llegits correctament.
- En el cas d'un error d'entrada abans que qualsevol dada es pugui llegir correctament, es retorna l'EOF.
Valor de retorn
Nota : Hi hauria d'haver almenys tants d'aquests arguments com el nombre de valors emmagatzemats pels especificadors de format.
Exemple: Programa C per il·lustrar la funció sscanf
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; }
Sortida
3 blue balls
2. scanf_s() Funció en C
Aquesta funció és específica dels compiladors de Microsoft. És el mateix que scanf, excepte que no provoca una sobrecàrrega de memòria intermèdia. La funció scanf_s() és més segura que la funció scanf() ja que proporciona un paràmetre addicional per especificar la mida de la memòria intermèdia que pot evitar el desbordament de la memòria intermèdia.
interfície en java
Sintaxi
int scanf_s (const char *format [argument]...);
Paràmetres
Nota : Aquí podem especificar la mida de la memòria intermèdia i controlar realment el límit de l'entrada de manera que tota l'aplicació no es col·loqui a causa d'un desbordament de memòria.
Valor de retorn
Per què utilitzar scanf_s()?
scanf només llegeix qualsevol entrada proporcionada des de la consola. C no verifica si l'entrada de l'usuari s'adaptarà a la variable que heu designat. Si teniu una matriu anomenada color[3] i utilitzeu scanf per a la cadena Red, funcionarà bé, però si l'usuari introdueix més de 3 caràcters, scanf comença a escriure a la memòria que no pertany a la matriu de colors.
C no ho detectarà ni us avisarà i podria o no bloquejar el programa depenent de si alguna cosa intenta accedir i escriure en aquesta ranura de memòria que no pertany a la matriu de colors. Aquí és on entra en joc scanf_s. scanf_s comprova que l'entrada de l'usuari s'ajustarà a l'espai de memòria donat.
Nota : scanf_s() només funcionarà a Microsoft Visual Studio.
Exemple 1: Programa C per il·lustrar la funció sscanf_s
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; }
Entrada 1
jtextfield
Red
Sortida 1
Red
Entrada 2
Yellow
Sortida 2
No Output
Exemple 2: Programa C per il·lustrar la relació entre la mida de la memòria intermèdia i la mida de la matriu.
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. Funció fscanf_s() en C
La diferència entre fscanf() i fscanf_s() és la mateixa que la de scanf() i scanf_s(). fscanf_s() és una funció segura que requereix que la mida de cada camp de tipus c C s S i [ ] es passi com a argument immediatament després de la variable.
Sintaxi
int fscanf_s( FILE *stream const char *format [argument ]... );
Paràmetres
Nota : fscanf_s té un paràmetre addicional per especificar la mida del buffer i controlar realment el límit de l'entrada.
paràmetre a l'script de shell
Valor de retorn
Nota : fscanf_s només funcionarà a MS Visual Studio.
Exemple: Programa C per il·lustrar la funció fscanf_s
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); }
Sortida
String1 |Hello| String2 |World| String3 |its| Integer |2017|
4. Funció sscanf_s() en C
sscanf_s() és una funció segura de sscanf() i les funcions segures requereixen que la mida de cada camp de tipus c C s S i [ es passi com a argument immediatament després de la variable.
java listnode
Sintaxi
int sscanf_s (const char * restrict buffer const char * restrict format ...);
Paràmetres
Nota : sscanf_s té un paràmetre addicional per especificar la mida del buffer i controlar realment el límit de l'entrada.
Valor de retorn
Nota : sscanf_s() només funcionarà a Microsoft Visual Studio.
Exemple: Programa C per il·lustrar la funció sscanf_s
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; }
Sortida
3 blue balls
Crea un qüestionari