Le langage de programmation C fournit diverses fonctions de bibliothèque intégrées pour la saisie utilisateur. Dans cet article, nous découvrirons les fonctions de la bibliothèque sscanf scanf_s fscanf_s sscanf_s en C.
1. Fonction sscanf() en C
sscanf() est utilisé pour lire l'entrée formatée à partir de la chaîne. Les fonctions scanf() et sscanf() sont similaires, la seule différence entre elles est que la fonction scanf() lit l'entrée de l'utilisateur à partir d'une entrée standard comme un clavier et la fonction sscanf() lit l'entrée d'une chaîne et stocke l'entrée dans une autre chaîne.
Syntaxe
int sscanf ( const char * str const char * format ...);
Paramètres
- En cas de succès, la fonction renvoie le nombre de valeurs lues avec succès.
- En cas d'échec d'entrée, avant que les données puissent être lues avec succès, EOF est renvoyé.
- En cas de succès, la fonction renvoie le nombre de valeurs lues.
- Dans le cas d'un échec d'entrée avant que les données puissent être lues avec succès, EOF est renvoyé.
- Si la taille du tampon est égale ou inférieure à la taille du tableau, une saisie supérieure ou égale à la taille du tampon entraînera une perte de données car les données en excès seront tronquées et les données jusqu'à la taille du tampon - 1 seront lues.
- Si la taille du tampon est supérieure à la taille d'un tableau, alors
- une saisie plus petite que la taille du tampon fonctionnera mais donnera une erreur
- une saisie supérieure à la taille du tampon entraînera un débordement de tampon et donnera la même erreur.
- En cas de succès, la fonction renvoie le nombre de valeurs lues avec succès.
- Dans le cas d'un échec d'entrée avant que les données puissent être lues avec succès, EOF est renvoyé.
- En cas de succès, la fonction renvoie le nombre de valeurs lues avec succès.
- Dans le cas d'un échec d'entrée avant que les données puissent être lues avec succès, EOF est renvoyé.
Valeur de retour
Note : Il doit y avoir au moins autant de ces arguments que le nombre de valeurs stockées par les spécificateurs de format.
Exemple : programme C pour illustrer la fonction 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; }
Sortir
3 blue balls
2. fonction scanf_s() en C
Cette fonction est spécifique aux compilateurs Microsoft. C'est la même chose que scanf sauf qu'il ne provoque pas de surcharge du tampon. La fonction scanf_s() est plus sécurisée que la fonction scanf() car elle fournit un paramètre supplémentaire pour spécifier la taille du tampon afin d'éviter un débordement de tampon.
Syntaxe
int scanf_s (const char *format [argument]...);
Paramètres
Note : Ici, nous pouvons spécifier la taille du tampon et contrôler réellement la limite d'entrée afin que l'ensemble de l'application ne plante pas en raison d'un débordement de mémoire.
Valeur de retour
Pourquoi utiliser scanf_s() ?
scanf lit simplement toute entrée fournie par la console. C ne vérifie pas si l'entrée utilisateur s'adaptera à la variable que vous avez désignée. Si vous avez un tableau appelé color[3] et que vous utilisez scanf pour la chaîne Red, cela fonctionnera correctement, mais si l'utilisateur saisit plus de 3 caractères, scanf commence à écrire dans la mémoire qui n'appartient pas au tableau de couleurs.
C ne détectera pas cela ni ne vous avertira et il pourrait ou non planter le programme selon que quelque chose essaie d'accéder et d'écrire sur cet emplacement mémoire qui n'appartient pas à la matrice de couleurs. C'est là que scanf_s entre en jeu. scanf_s vérifie que l'entrée de l'utilisateur tiendra dans l'espace mémoire donné.
combien y a-t-il de villes aux États-Unis d'Amérique
Note : scanf_s() ne fonctionnera que dans Microsoft Visual Studio.
Exemple 1 : programme C pour illustrer la fonction 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; }
Entrée 1
Red
Sortie 1
Red
Entrée 2
Yellow
Sortie 2
No Output
Exemple 2 : programme C pour illustrer la relation entre la taille du tampon et la taille du tableau.
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. Fonction fscanf_s() en C
La différence entre fscanf() et fscanf_s() est la même que celle entre scanf() et scanf_s(). fscanf_s() est une fonction sécurisée qui nécessite que la taille de chaque champ de type c C s S et [ ] soit transmise comme argument immédiatement après la variable.
Syntaxe
int fscanf_s( FILE *stream const char *format [argument ]... );
Paramètres
Note : fscanf_s a un paramètre supplémentaire pour spécifier la taille du tampon et contrôler réellement la limite de l'entrée.
Valeur de retour
Note : fscanf_s fonctionnera uniquement dans MS Visual studio.
format de chaîne Java
Exemple : programme C pour illustrer la fonction 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); }
Sortir
String1 |Hello| String2 |World| String3 |its| Integer |2017|
4. Fonction sscanf_s() en C
sscanf_s() est une fonction sécurisée de sscanf() et les fonctions sécurisées nécessitent que la taille de chaque champ de type c C s S et [ soit passée comme argument immédiatement après la variable.
Syntaxe
int sscanf_s (const char * restrict buffer const char * restrict format ...);
Paramètres
Note : sscanf_s a un paramètre supplémentaire pour spécifier la taille du tampon et contrôler réellement la limite de l'entrée.
Valeur de retour
Note : sscanf_s() ne fonctionnera que dans Microsoft Visual Studio.
Exemple : programme C pour illustrer la fonction 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; }
Sortir
3 blue balls
Créer un quiz