Se connecter
Se connecter
Inscription
Mot de passe perdu
Connexion:
[Actualités]
Nvidia prévient d'une pénurie de GPU ce trimestre, avec une reprise début 2025
[Actualités]
Les Technos #469 : Un jour sans fin
[Actualités]
Test Farming Simulator 25 (PS5) - Des innovations intéressantes mais des perfor...
[Actualités]
Qualcomm souhaite réduire davantage les prix des PC Windows basés sur ARM
[Actualités]
Finalement, Google préparerait une nouvelle tablette mais la Pixel Tablet 2 ser...
[Actualités]
Windows 10 version 22H2 : erreur de mise à jour et de désinstallation
[Actualités]
OpenAI prépare désormais son propre navigateur
[Actualités]
WhatsApp bat Telegram : les transcriptions des messages vocaux arrivent pour tou...
[Actualités]
Unreal et Unreal Tournament désormais gratuits sur Internet Archive
[Actualités]
Windows 10 : Microsoft affiche des publicités en plein écran pour les PC équi...
[Articles]
Dungeons 4 - Nintendo Switch Edition
[Articles]
The Bridge Curse 2 : The Extrication
[Articles]
Farmagia
[Articles]
I*CHU: Chibi Edition
[Articles]
Farming Simulator 25
[Articles]
Goblin Slayer -Another Adventurer- Nightmare Feast
[Articles]
Deel lance des programmes en marque blanche et pour les revendeurs pour plus de ...
[Articles]
ESET Research : WolfsBane, nouvelle porte dérobée de cyber-espionnage Linux cr...
[Articles]
Devoteam présente son nouveau plan stratégique « AMPLIFY » avec un fort acce...
[Articles]
LEGO Horizon Adventures
Actualités
Lettre d'information
Proposer une actualité
Archives
Actualités
Articles
Programmation
Press Release
Matériel
Logiciels
Livres
Interviews
Derniers commentaires
Jeux Vidéos
XBox One
XBox 360
Wii U
PSP
PS4
PS3
PC
DS
GameCube
3DS
Forum
Derniers messages
Informatique
Fun
Divers
Logithèque
Blogs
Divers
A Propos
Annonceurs
Contact
Recherche
RSS
Editer un article
Titre
Mots Clés
Texte
[size=18] [b]Nom[/b] [/size] scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf - Entrées formatées. [size=18] [b]Résumé[/b] [/size] .nf [b]#include
[/b] .na [b][i]int scanf (const char * format , ... );[/i][/b] [b][/b] [b][i]int fscanf (FILE * stream , const char * format , ... );[/i][/b] [b][/b] [b][i]int sscanf (const char * str , const char * format , ... );[/i][/b] [b]#include
[/b] [b][i]int vscanf (const char * format , va_list ap );[/i][/b] [b][/b] [b][i]int vsscanf (const char * str , const char * format , va_list ap );[/i][/b] [b][/b] [b][i]int vfscanf (FILE * stream , const char * format , va_list ap );[/i][/b] .ad [size=18] [b]Description[/b] [/size] Les fonctions de la famille [b]scanf[/b] analysent leurs entrées conformément au [i]format[/i] décrit plus bas. Ce format peut contenir des [b]indicateurs de conversion .[/b] Les résultats des conversions, s'il y en a, sont stockés dans des arguments [b]pointeurs .[/b] La fonction [b]scanf[/b] lit ses données depuis le flux d'entrée standard [b]stdin ,[/b] [b]fscanf[/b] lit ses entrées depuis le flux pointé par [b]stream ,[/b] et [b]sscanf[/b] lit ses entrées dans la chaîne de caractères pointée par [b]str .[/b] La fonction [b]vfscanf[/b] est analogue à [b]vfprintf (3)[/b] et lit ses arguments depuis le flux pointé par [i]stream[/i] en utilisant une liste variable d'arguments pointeurs, voir [b]stdarg (3).[/b] La fonction [b]vscanf[/b] examine l'entrée standard en utilisant une liste variable d'arguments pointeurs et la fonction [b]vsscanf[/b] examine une chaîne. Elles sont respectivement analogues aux fonctions [b]vprintf[/b] et [b]vsprintf .[/b] Les arguments [i]pointeurs[/i] successifs doivent correspondre correctement aux indicateurs de conversion fournis (voir néanmoins l'attribut '*' plus bas). Toutes les conversions sont introduites par le caractère [b]%[/b] (symbole pourcent). La chaîne [i]format[/i] peut également contenir d'autres caractères. Les blancs (comme les espaces, les tabulations ou les retours chariots) dans la chaîne [i]format[/i] correspondent à un nombre quelconque de blancs (et même aucun) dans la chaine d'entrée. Tous les autres caractères ne peuvent correspondre qu'a eux-même. L'examen de l'entrée s'arrête dès qu'un caractère d'entrée ne correspond pas à un caractère du format. L'examen s'arrête également quand une conversion d'entrée est impossible (voir ci-dessous). [size=18] [b]Conversions[/b] [/size] A la suite du caractère [b]%[/b] introduisant une conversion, il peut y avoir un nombre quelconque de caractères [i]attributs[/i] de la liste suivante : [b]*[/b] [table][row][col] [/col][col]Ne pas stocker le résultat. La conversion est bien effectuée comme d'habitude, mais le resultat est éliminé au lieu d'être memorisé dans un pointeur.[/col][/row][/table] [b]a [/b] [table][row][col] [/col][col](GlibC) Indique que la conversion sera de type [b]s ,[/b] la mémoire nécessaire pour la chaine sera allouée avec [b]malloc(3)[/b] et le pointeur sera assigné à la variable de type [i] char[/i] qui n'a pas besoin d'être initialisée auparavant. Cet attribut n'existe pas en [b]C ANSI .[/b][/col][/row][/table] [b]a[/b] [table][row][col] [/col][col](C99) Équivalent à [b]f.[/b][/col][/row][/table] [b]h[/b] [table][row][col] [/col][col]Indique que la conversion sera de type [b]dioux[/b] ou [b]n[/b] et que le pointeur suivant est un pointeur sur un [i]short int[/i] (plutôt que sur un [b]int ).[/b][/col][/row][/table] [b]l[/b] [table][row][col] [/col][col]Indique que la conversion sera de type [b]dioux[/b] ou [b]n[/b] et que le pointeur suivant est un pointeur sur un [i]long int[/i] (plutôt que sur un [b]int ),[/b] ou que la conversion sera de type [b]efg[/b] et que le pointeur suivant est un pointeur sur un [i]double[/i] (plutôt que sur un [b]float ).[/b] Indiquer deux attributs [b]l[/b] successifs est équivalent à indiquer l'attribut [b]L .[/b][/col][/row][/table] [b]L[/b] [table][row][col] [/col][col]Indique que la conversion sera de type [b]efg[/b] et que le pointeur suivant est un pointeur sur un [b]long double [/b] ou que la conversion sera de type [b]dioux[/b] et que le pointeur suivant est un pointeur sur un [b]long long .[/b] (ce type n'existe pas en [b]C ANSI .[/b] Un programme l'utilisant ne sera pas portable sur toutes les machines).[/col][/row][/table] [b]q[/b] [table][row][col] [/col][col]est équivalent à L. Cet attribut n'existe pas en [b]C ANSI .[/b][/col][/row][/table] En plus de ces attributs peut se trouver un champ optionnel de longueur maximale, exprimée sous forme d'entier, entre le caractère [b]%[/b] et l'indicateur de conversion. Si aucune longueur n'est donnée, une valeur infinie est utilisée par défaut (avec une exception, voir plus bas). Autrement, la conversion examinera au plus le nombre de caractères indiqués. Avant que les conversions ne commencent, la plupart d'entre elles éliminent les blancs. Ces espaces blancs ne sont pas comptés dans le champ de largeur maximale. Les conversions suivantes sont disponibles : [b]%[/b] [table][row][col] [/col][col]Correspond à un caractère `%'. Ceci signifie qu'un indicateur `%&%' dans la chaîne de format correspond à un seul caractere `%' dans la chaine d'entrée. Aucune conversion, et aucune assignation n'a lieu.[/col][/row][/table] [b]d[/b] [table][row][col] [/col][col]Correspond à un entier décimal éventuellement signé, le pointeur correspondant doit être du type [b]int * .[/b][/col][/row][/table] [b]D[/b] [table][row][col] [/col][col]Equivalent à [b]ld ,[/b] utilisé uniquement pour compatibilité avec des versions précédentes. (Et seulement dans libc4. Dans libc5 et glibc le %D est ignoré silencieusement, ce qui conduit d'anciens programmes à échouer mystérieusement).[/col][/row][/table] [b]i[/b] [table][row][col] [/col][col]correspond à un entier éventuellement signé. Le pointeur suivant doit être du type [b]int *.[/b] L'entier est en base 16 (héxadécimal) s'il commence par `0x' ou `0X', en base 8 (octal) s'il commence par un `0', et en base 10 sinon. Seuls les caractères correspondants à la base concernée sont utilisés.[/col][/row][/table] [b]o[/b] [table][row][col] [/col][col]Correspond à un entier octal non signé. Le pointeur correspondant doit être du type [b]unsigned int * .[/b][/col][/row][/table] [b]u[/b] [table][row][col] [/col][col]Correspond à un entier décimal non signé. Le pointeur suivant doit être du type [b]unsigned int * .[/b][/col][/row][/table] [b]x[/b] [table][row][col] [/col][col]Correspond à un entier héxadécimal non signé. Le pointeur suivant doit être du type [b]unsigned int * .[/b][/col][/row][/table] [b]X[/b] [table][row][col] [/col][col]Equivalent à [b]x [/b][/col][/row][/table] [b]f[/b] [table][row][col] [/col][col]Correspond à un nombre réel éventuellement signé. Le pointeur correspondant doit être du type [b]float * .[/b][/col][/row][/table] [b]e[/b] [table][row][col] [/col][col]Equivalent à [b]f .[/b][/col][/row][/table] [b]g[/b] [table][row][col] [/col][col]Equivalent à [b]f .[/b][/col][/row][/table] [b]E[/b] [table][row][col] [/col][col]Equivalent à [b]f [/b][/col][/row][/table] [b]s[/b] [table][row][col] [/col][col]Correspond à une séquence de caractères différents des caractères blancs. Le pointeur correspondant doit être du type [b]char *,[/b] et la chaine doit être assez large pour accueillir toute la séquence, ainsi que le caractère [b]NUL[/b] final. La conversion s'arrête au premier caractère blanc, ou à la longueur maximale du champ.[/col][/row][/table] [b]c[/b] [table][row][col] [/col][col]Correspond à une séquence de [i]width[/i] caractères (par défaut 1). Le pointeur associé doit être du type [b]char *,[/b] et il doit y avoir suffisament de place dans la chaîne pour tous les caracteres. Aucun caractère [b]NUL[/b] final n'est ajouté. Les caractères blancs de début ne sont pas supprimés. Si on veut les éliminer, il faut utiliser un espace dans le format.[/col][/row][/table] [b]&[[/b] [table][row][col] [/col][col]Correspond à une séquence non vide de caractères appartenant à un ensemble donné. Le pointeur correspondant doit être du type [b]char * ,[/b] et il doit y avoir suffisament de place dans le tableau de caractères pour accueillir la chaîne ainsi qu'un caractère [b]NUL[/b] final. Les caractères blancs du début ne sont pas supprimés. La chaîne est constituées de caractères inclus ou exclus d'un ensemble donné. L'ensemble est composé des caractères compris entre les deux crochets [b][[/b] et [b]] .[/b] L'ensemble [i]exclut[/i] ces caractères si le premier après le crochet ouvrant est un accent circonflexe [b]^ .[/b] Pour inclure un crochet fermant dans l'ensemble, il suffit de le placer en première position après le crochet ouvrant, ou l'accent circonflexe ; à tout autre emplacement il servira à terminer l'ensemble. Le caractère tiret [b]-[/b] a également une signification particulière. Quand il est placé entre deux autres caractères, il ajoute à l'ensemble les caractères intermédiaires. Pour inclure un tiret dans l'ensemble, il faut le placer en dernière position avant le crochet fermant.Par exemple, `[^]0-9-]' correspond à l'ensemble `Tout sauf le crochet fermant, les chiffres de 0 à 9, et le tiret'. La chaine se termine dès l'occurence d'un caractère exclus (ou inclus s'il y à un accent circonflexe ) de l'ensemble, ou dès qu'on atteint la longueur maximale du champ.[/col][/row][/table] [b]p[/b] [table][row][col] [/col][col]Correspond à une valeur de pointeur (comme affichée par `%p' dans [b]printf (3).[/b] Le pointeur correspondant doit être du type [b]void * .[/b][/col][/row][/table] [b]n[/b] [table][row][col] [/col][col]Aucune lecture n'est faite. Le nombre de caractères déjà lus est stocké dans le pointeur correspondant, qui doit être de type [b]int *.[/b] Ce n'est [i]pas[/i] une conversion, mais le stockage peut quand même être supprimé avec un attribut [b]* .[/b] Le standard C indique : `L'exécution d'une directive %n n'incrémente pas le compteur d'assignations renvoyé à la fin de l'exécution'. Mais il semble qu'il y ait des contradictions sur ce point. Il est probablement sage de ne pas faire de suppositions sur l'effet de la conversion %n sur la valeur renvoyée.[/col][/row][/table] [size=18] [b]Valeur renvoyée[/b] [/size] Ces fonctions renvoient le nombre d'éléments d'entrées correctement assignés. Ce nombre peut être plus petit que le nombre d'élements attendus, et même être nul, s'il y a une erreur de mise en correspondance. La valeur zéro indique qu'aucune conversion n'a été faite bien que des caractères étaient disponibles en entrée. Typiquement c'est un caractère d'entrée invalide qui en est la cause, par exemple un caractère alphabétique dans une conversion `%d'. La valeur [b]EOF[/b] est renvoyée si une erreur d'entrée a eu lieu avant toute conversion, par exemple une fin de fichier. Si une erreur fin-de-fichier se produit après que les conversions aient commencé, le nombre de conversions réussies sera renvoyé. [size=18] [b]Voir aussi[/b] [/size] [b]strtol (3),[/b] [b]strtoul (3),[/b] [b]strtod (3),[/b] [b]getc (3),[/b] [b]printf (3)[/b] [size=18] [b]Conformité[/b] [/size] Les fonctions [b]fscanf ,[/b] [b]scanf ,[/b] et [b]sscanf[/b] sont conformes à ANSI X3.159-1989 (``C ANSI''). L'attribut [b]q[/b] est une notation [i]BSD 4.4[/i] pour [b]long long ,[/b] alors que [b]ll[/b] ou l'utilisation de [b]L[/b] dans les conversions entières sont des notations GNU. Les versions Linux de ces fonctions sont basées sur la bibliothèque [b]libio GNU .[/b] Jetez un oeil sur la documentation [i]info[/i] de la [i]libc GNU (glibc-1.08)[/i] pour une description complète. [size=18] [b]Bugs[/b] [/size] Toutes ces fonctions sont totalement conformes à ANSI X3.159-1989, mais lui ajoutent les attributs [b]q[/b] et [b]a[/b] ainsi que des comportements supplémentaires des attributs [b]L[/b] et [b]l .[/b] Ce derniers doivent être considérés comme des bugs, car ils modifient le comportement d'attributs définis dans ANSI X3.159-1989. Certaines combinaisons d'attributs n'ont pas de sens en [b]C ANSI [/b] (par exemple [b]%Ld ).[/b] Bien qu'elles aient un comportement bien défini sous Linux, ce n'est peut être pas le cas sur d'autres architectures. Il vaut donc mieux n'utiliser que des attributs définis en [b]C ANSI ,[/b] par exemple, utilisez [b]q[/b] à la place de [b]L[/b] avec les conversions [b]diouxX[/b] ou [b]ll .[/b] L'utilisation [b]q[/b] n'est pas la même sous [b]BSD 4.4 ,[/b] car il peut être utilisé avec des conversions de réels de manière équivalente à [b]L .[/b] [NDT] La conversion [b]%s[/b] devrait toujours être accompagnée d'une longueur maximale de chaîne de caractères. En effet, il existe un risque de débordement de buffer, qui peut conduire à un trou de sécurité important dans un programme Set-UID ou Set-GID. [size=18] [b]Traduction[/b] [/size] Christophe Blaess, 1996-2003.
Fichier
Forum
-
Derniers messages
Bavardages
Aujourd'hui, je rénove ou je construis ^^
Software
problème sur windows 10
Réseaux et Télécom
Administrateur Réseau - Cisco
Réseaux et Télécom
Problème wifi (POE)
Software
Postfix - Need help
Bavardages
Oh râge oh désespoir !
Programmation
Enregistrement client et envoi mail
Software
SÉCURITÉ MACBOOK
Hardware
conseil matos réseau?
Hardware
nVidia Shield Android TV
Actualités
-
Archives
Matériel
Nvidia prévient d'une pénurie de GPU ce trimestre, avec une reprise début 2025
Les Technos
Les Technos #469 : Un jour sans fin
Jeux Vidéos
Test Farming Simulator 25 (PS5) - Des innovations intéressantes mais des performances à revoir
Matériel
Qualcomm souhaite réduire davantage les prix des PC Windows basés sur ARM
Tablettes
Finalement, Google préparerait une nouvelle tablette mais la Pixel Tablet 2 serait abandonnée
Ada
CSS
Cobol
CPP
HTML
Fortran
Java
JavaScript
Pascal
Perl
PHP
Python
SQL
VB
XML
Anon URL
DailyMotion
eBay
Flickr
FLV
Google Video
Google Maps
Metacafe
MP3
SeeqPod
Veoh
Yahoo Video
YouTube
6px
8px
10px
12px
14px
16px
18px
Informaticien.be
- © 2002-2024
Akretio
SPRL - Generated via
Kelare
The Akretio Network:
Akretio
-
Freedelity
-
KelCommerce
-
Votre publicité sur informaticien.be ?