© Éditions Eyrolles
55
chapitre n° 4
Les entrées-sorties conversationnelles
●
format :
• constante chaîne (entre " "),
• pointeur sur une chaîne de caractères (cette notion sera étudiée ultérieurement).
●
liste_d’expressions : suite d’expressions séparées par des virgules d’un type en
accord avec le code format correspondant.
Nous verrons que les deux notions de constante chaîne et de pointeur sur une chaîne sont
identiques.
1.5 En cas d’erreur de programmation
Deux types d’erreur de programmation peuvent apparaître dans l’emploi de printf.
a) code de format en désaccord avec le type de l’expression
Lorsque le code de format, bien qu’erroné, correspond à une information de même taille
(c’est-à-dire occupant la même place en mémoire) que celle relative au type de l’expression,
les conséquences de l’erreur se limitent à une mauvaise interprétation de l’expression. C’est
ce qui se passe, par exemple, lorsque l’on écrit une valeur de type int en %u ou une valeur de
type unsigned int en %d.
En revanche, lorsque le code format correspond à une information de taille différente de celle
relative au type de l’expression, les conséquences sont généralement plus désastreuses, du
moins si d’autres valeurs doivent être affichées à la suite. En effet, tout se passe alors comme
si, dans la suite d’octets (correspondant aux différentes valeurs à afficher) reçue par printf,
le repérage des emplacements des valeurs suivantes se trouvait soumis à un décalage.
b) nombre de codes de format différent du nombre d’expressions
de la liste
Dans ce cas, il faut savoir que C cherche toujours à satisfaire le contenu du format.
Ce qui signifie que, si des expressions de la liste n’ont pas de code format, elles ne seront pas
affichées. C’est le cas dans cette instruction où la valeur de p ne sera pas affichée :
printf ("%d", n, p) ;
En revanche, si vous prévoyez trop de codes de format, les conséquences seront là encore
assez désastreuses puisque printf cherchera à afficher n’importe quoi. C’est le cas dans
cette instruction où deux valeurs seront affichées, la seconde étant (relativement) aléatoire :
printf ("%d %d ", n) ;
Delannoy Livre.book Page 55 Mercredi, 6. mai 2009 4:26 16
55
chapitre n° 4
Les entrées-sorties conversationnelles
●
format :
• constante chaîne (entre " "),
• pointeur sur une chaîne de caractères (cette notion sera étudiée ultérieurement).
●
liste_d’expressions : suite d’expressions séparées par des virgules d’un type en
accord avec le code format correspondant.
Nous verrons que les deux notions de constante chaîne et de pointeur sur une chaîne sont
identiques.
1.5 En cas d’erreur de programmation
Deux types d’erreur de programmation peuvent apparaître dans l’emploi de printf.
a) code de format en désaccord avec le type de l’expression
Lorsque le code de format, bien qu’erroné, correspond à une information de même taille
(c’est-à-dire occupant la même place en mémoire) que celle relative au type de l’expression,
les conséquences de l’erreur se limitent à une mauvaise interprétation de l’expression. C’est
ce qui se passe, par exemple, lorsque l’on écrit une valeur de type int en %u ou une valeur de
type unsigned int en %d.
En revanche, lorsque le code format correspond à une information de taille différente de celle
relative au type de l’expression, les conséquences sont généralement plus désastreuses, du
moins si d’autres valeurs doivent être affichées à la suite. En effet, tout se passe alors comme
si, dans la suite d’octets (correspondant aux différentes valeurs à afficher) reçue par printf,
le repérage des emplacements des valeurs suivantes se trouvait soumis à un décalage.
b) nombre de codes de format différent du nombre d’expressions
de la liste
Dans ce cas, il faut savoir que C cherche toujours à satisfaire le contenu du format.
Ce qui signifie que, si des expressions de la liste n’ont pas de code format, elles ne seront pas
affichées. C’est le cas dans cette instruction où la valeur de p ne sera pas affichée :
printf ("%d", n, p) ;
En revanche, si vous prévoyez trop de codes de format, les conséquences seront là encore
assez désastreuses puisque printf cherchera à afficher n’importe quoi. C’est le cas dans
cette instruction où deux valeurs seront affichées, la seconde étant (relativement) aléatoire :
printf ("%d %d ", n) ;
Delannoy Livre.book Page 55 Mercredi, 6. mai 2009 4:26 16
