« Programmation C/Entrées/sorties » : différence entre les versions
Contenu supprimé Contenu ajouté
m Robot : Corrige les liens pointants sur des redirections |
→Sorties formatées : Prototype C99 et diverses corrections |
||
Ligne 155 :
== Sorties formatées ==
<source lang="c">
int printf(const char * restrict format, ...);
int fprintf(FILE * restrict flux, const char * restrict format, ...);
int sprintf(char * restrict chaine, const char *
int snprintf(char * restrict chaine,
</source>
Ligne 170 :
Bien que cela à déjà été traité dans la section dédiée aux chaines de caractères, il faut faire très attention avec la fonction <code>sprintf()</code>. Dans la mesure où la fonction n'a aucune idée de la taille de la zone mémoire transmise, il faut s'assurer qu'il n'y aura pas de débordements. Mieux vaut donc utiliser la fonction <code>snprintf()</code>, qui permet de limiter explicitement le nombre de caractère à écrire.
À noter que <code>snprintf()</code> devrait toujours retourner la taille de la chaine à écrire,
=== Type de conversion ===
Ligne 242 :
* ll : cet attribut ne concerne que les types entiers, où le type attendu sera <code>long long int</code>.
* L : pour les types réels, le type attendu sera <code>long double</code>.
* z pour afficher une variable de type ''size_t''.
Pour résumer les types d'arguments attendus en fonction de l'indicateur de taille et du type de conversion :
Ligne 282 ⟶ 283 :
<source lang="c">
printf( gettext("La chaine
</source>
Ligne 288 ⟶ 289 :
Une traduction en allemand du message précédant, pourrait donner :
<code>"%d Zeichen lang ist die Zeichenkette
On remarque d'emblée que les spécificateurs de format sont inversés par rapport à la chaine originale. Or l'ordre des arguments passés à la fonction <code>printf()</code> sera toujours le même. Il est quand même possible de s'en sortir avec les arguments positionnels. Pour cela, il suffit d'ajouter à la suite du caractère <code>%</code> un nombre,
<source lang="c">
char * s = "Bla bla";
printf("La chaine %2$s a %1$
</source>
Ligne 314 ⟶ 315 :
<source lang="c">
int setvbuf(
</source>
Cette fonction doit être appelée juste '''après''' l'ouverture du flux et '''avant''' la première écriture. Les arguments ont la signification suivante :
* <code>flux</code> : Le flux <code>stdio</code> pour lequel vous voulez changer la méthode d'écriture.
* <code>mem</code> : Vous pouvez transmettre une zone mémoire qui sera utilisée pour stocker les données avant d'être écrites dans le fichier. Vous pouvez aussi passer la valeur <code>NULL</code>, dans ce cas les fonctions <code>stdio</code>,
* <code>mode</code> : indique comment se feront les écritures :
** <code>_IONBF</code> : écriture immédiate, pas de stockage temporaire.
|