SPRINTF |
Chaine d'impression formaté |
---|---|
Langage C | stdio.h |
Syntaxe
int sprintf(char *tampon, const char *texte,...); |
Paramètres
Nom | Description | |
---|---|---|
tampon | Ce paramètre permet d'indiquer le tampon recevant les données | |
texte | Ce paramètre permet d'indiquer le texte à écrire dans le tampon. Il est a noter que un ou plusieurs des spécificateurs suivants peuvent être inclus dans le texte et il utilisera un argument supplémentaire pour chaque spécificateurs : | |
Spécificateur | Description | |
%c | Ce spécificateur indique d'insérer à cette position un caractère contenu dans la liste des arguments après le texte | |
%d | Ce spécificateur indique d'insérer à cette position un entier sous forme décimal contenu dans la liste des arguments après le texte | |
%f | Ce spécificateur indique d'insérer à cette position un nombre à virgule flottante contenu dans la liste des arguments après le texte | |
%i | Ce spécificateur indique d'insérer à cette position un entier contenu dans la liste des arguments après le texte | |
%o | Ce spécificateur indique d'insérer à cette position un entier sous forme octal contenu dans la liste des arguments après le texte | |
%s | Ce spécificateur indique d'insérer à cette position une chaîne de caractères contenu dans la liste des arguments après le texte | |
%x | Ce spécificateur indique d'insérer à cette position un entier sous forme hexadécimal contenu dans la liste des arguments après le texte | |
Il est possible d'ajouter une précision du nombre décimal afficher en insérant le nombre entre le symbole de pourcentage et la lettre. |
Retour
Valeur | Description |
---|---|
0 ou supérieur | Ces valeurs permettent d'indiquer la longueur du tampon généré après le formatage. |
Description
Cette fonction effectue l'écriture de texte selon un certain format à partir d'un tampon.
Algorithme
MODULE SPRINTF(Ref buffer, format, ...) * Initialiser un index pour écrire dans le buffer buffer_index ← 0 * Parcourir la chaîne de format i ← 0 BOUCLE TANT QUE format[i] ≠ '\0' SI format[i] = '%' ALORS * Détecter le caractère de format suivant i ← i + 1 EVALUER CAS format[i] 'd': * Lire un entier value ← next_argument_as_int() * Convertir l'entier en chaîne et l'ajouter au buffer buffer_index ← buffer_index + append_integer_to_buffer(buffer + buffer_index, value) 'f': * Lire un nombre flottant value ← next_argument_as_double() * Convertir le flottant en chaîne et l'ajouter au buffer buffer_index ← buffer_index + append_float_to_buffer(buffer + buffer_index, value) 's': * Lire une chaîne value = next_argument_as_string() * Copier la chaîne dans le buffer buffer_index ← buffer_index + append_string_to_buffer(buffer + buffer_index, value) AUTREMENT * Gérer d'autres formats ou caractères invalides buffer[buffer_index++] ← '%' buffer_index ← buffer_index + 1 buffer[buffer_index++] ← format[i] FIN EVALUER CAS SINON * Copier un caractère non formaté directement dans le buffer buffer[buffer_index] ← format[i] buffer_index ← buffer_index + 1 FIN SI i ← i + 1 FIN BOUCLE TANT QUE * Ajouter le caractère nul de fin de chaîne buffer[buffer_index] ← '\0' * Retourner le nombre de caractères écrits RETOURNE buffer_index |
Remarques
- Il faut s'assurer que le tampon recevant les données soit assez grand pour recevoir le contenu demandé. Toutefois, il est très difficile d'anticiper la taille qu'aura le résultat avec le formatage de données. Cependant, on devrait prévoir au moins 6 caractères pour un entier court, 20 caractères par un entier long, 30 pour des nombres réels et faire un calcul avec strlen dans le cas d'une chaîne de caractères à y introduire.
- Le comportement de cette fonction est similaire à la fonction «printf» sauf qu'il retourne son résultat dans une chaîne de caractères plutôt que de l'afficher.
- Après le paramètre de formatage, la fonction attend au moins un nombre égale ou supérieur de paramètres que le nombre de «%i», «%c»,... réunit.
- Il peut être judicieux d'utiliser plusieurs fois cette fonction pour préparer par morceaux de pièces trop complexes pour une simple fonction «printf».
- Contrairement à ce que l'on pourrait croire, cette fonction n'est pas définie dans l'entête «string.h» mais plutôt dans «stdio.h».
- Si votre compilateur de langage de programmation C ou C++ supporte la fonction «snprintf», il serait plutôt préférable d'utiliser cette fonction. Malheureusement, elle n'a été incluse quand dans le standard C++ de 2011, il n'est donc pas nécessairement supporté sur votre plateforme.
Exemples
Voici divers exemple d'affichages de format :
Essayer maintenant !
- #include <stdio.h>
- #include <stdlib.h>
-
- int main()
- {
- char Temp[255];
- sprintf(&Temp,"Boujour!");
- puts(Temp);
- sprintf(&Temp,"Entier %%i = %i",15);
- puts(Temp);
- sprintf(&Temp,"Hexadecimal %%x = %x",16);
- puts(Temp);
- sprintf(&Temp,"Octal %%o = %o",16);
- puts(Temp);
- sprintf(&Temp,"Chaine de caracteres %%s = %s","message");
- puts(Temp);
- sprintf(&Temp,"Reel %%f = %f",123.45);
- puts(Temp);
- sprintf(&Temp,"Reel %%f = %.2f",123.45);
- puts(Temp);
- return 0;
- }
on obtiendra le résultat suivant :
Boujour!Entier %i = 15
Hexadecimal %x = 10
Octal %o = 20
Chaine de caracteres %s = message
Reel %f = 123.450000
Reel %f = 123.45
Voici divers exemple d'affichage de caractères à l'aide de leur code ASCII :
Essayer maintenant !
on obtiendra le résultat suivant :
0A
O
Z
Voir également
Langage de programmation - C - Référence de procédures et fonctions - fprintf
Langage de programmation - C - Référence de procédures et fonctions - printf
Langage de programmation - C++ - Référence de procédures et fonctions - sprintf
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 734.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 248.
Dernière mise à jour : Mardi, le 28 juillet 2015