logo

Fonctions de bibliothèque intégrées pour la saisie utilisateur | sscanf, scanf_s, fscanf_s, sscanf_s

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

    str: Chaîne d'entrée à partir de laquelle nous voulons lire les données.format: Une chaîne qui contient le(s) spécificateur(s) de type.… (points de suspension): Cela indique que la fonction accepte un nombre variable d'arguments.

Valeur de retour

  • 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é.

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

    flux : Pointeur vers l'objet File qui identifie le flux.format: C'est une chaîne qui contient le(s) spécificateur(s) de type.… (points de suspension): Cela indique que la fonction accepte un nombre variable d'arguments.

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

  • 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é.

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; } 
  • 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.

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

    str: chaîne utilisée pour récupérer les donnéesformat: chaîne qui contient le(s) spécificateur(s) de type… (points de suspension): Cela indique que la fonction accepte un nombre variable d'arguments.

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

  • 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é.

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

    str: chaîne utilisée pour récupérer les donnéesformat: chaîne qui contient le(s) spécificateur(s) de type… (points de suspension): Cela indique que la fonction accepte un nombre variable d'arguments.

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

  • 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é.

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