« Programmation C/Entrées/sorties » : différence entre les versions

Contenu supprimé Contenu ajouté
Conj
Aucun résumé des modifications
 
Ligne 57 :
<syntaxhighlight lang="c">
fopen("fichier.txt", "rb"); /* Ouverture sans conversion */
fopen("fichier.txt", "wb"); /* L'écriture d'un '\n' n'entraineran’entraînera pas l'ajout d'un '\r' */
</syntaxhighlight>
</li>
Ligne 168 :
En retour elle indique le nombre de caractères qui a été écrit à l'écran, dans le flux ou la zone mémoire ('''caractère nul non compris''' pour <code>sprintf</code>).
 
Bien que cela ait déjà été traité dans la section dédiée aux chaineschaînes 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, indépendamment de la limite fixée par le paramètre <code>taille</code>. Le conditionnel reste de mise, car beaucoup d'implémentations de cette fonction se limitent à retourner le nombre de caractères ''écrit'', c'est à dire en s'arrêtant à la limite le cas échéant.
Ligne 184 :
*'''g''' effectue un mixe de 'f' et de 'e' suivant le format le plus approprié ;
*'''c''' pour afficher en tant que caractère ;
*'''s''' pour afficher une chainechaîne de caractère C standard ;
*'''p''' pour afficher la valeur d'un pointeur, généralement sous forme hexadécimale. Suivant le compilateur, c'est l'équivalent soit à <code>"%08x"</code>, ou alors à <code>"0x%08x"</code>. ;
*'''n''' ce n'est pas un format d'affichage et l'argument associé doit être de type <code>int *</code> et être une référence valide. La fonction stockera dans l'entier pointé par l'argument le nombre de caractères écrit jusqu'à maintenant ;
Ligne 211 :
</syntaxhighlight>
 
À noter que pour le formattageformatage de nombres entiers, la limite « dure » du spécificateur de format est sans effet, pour éviter de facheusesfâcheuses erreurs d'interprétation. On peut toutefois utiliser les extensions suivantes :
* <code>0</code> : Si un zéro est présent dans le spécificateur de largeur, le nombre sera aligné avec zéros au lieu de blancs.
* <code>+</code> : Si un signe plus est présent avec le spécificateur de largeur, le signe du nombre sera affiché tout le temps (0 est considéré comme positif).
Ligne 239 :
* hh : indique que l'entier est un <code>[un]signed char</code> au lieu d'un <code>[unsigned] int</code> ;
* h : indique que l'entier est de type <code>[unsigned] short</code> au lieu d'un <code>[unsigned] int</code> ;
* l : pour les entiers, le type attendu ne sera plus <code>int</code> mais <code>long int</code> et pour les chaineschaînes de caractères, il sera de type <code>wchar_t *</code> (c.f section [[Programmation C/Chaînes de caractères|chaînes de caractères]]).
* 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>.