Vous imprimez s[10]
comme un caractère ( %c
), et la valeur numérique de s[10]
es 0
qui représente le caractère \0
qui signifie la fin de la chaîne et n'a pas de représentation textuelle. C'est pourquoi vous ne voyez rien.
Si vous voulez voir la valeur numérique au lieu de la valeur du caractère, utilisez %d
pour l'imprimer comme un nombre décimal (entier) :
printf("%d\n", s[10]);
Notez que la fin de chaîne n'est pas la même chose que la fin de ligne, comme indiqué dans l'un de vos commentaires. Fin de chaîne signifie que toute opération de chaîne sur une séquence de caractères doit s'arrêter lorsque le premier caractère de la séquence est terminé. \0
arrive. Si la séquence de caractères contient autre chose après \0
elle ne sera pas imprimée, car l'opération de chaîne de caractères s'arrête à la première lettre de la chaîne. \0
caractère.
Une fin de ligne est cependant un caractère normal, dont l'effet visuel est de dire au terminal ou à l'éditeur de texte d'imprimer le caractère suivant la fin de ligne dans une nouvelle ligne.
Si vous voulez avoir un vecteur rempli de caractères de fin de ligne (et les imprimer comme tels), vous devez déplacer le vecteur et le remplir :
char s[256];
int i;
for (i = 0; i < 256; ++i)
s[i] = '\n';
printf("%c\n", s[10]);
La valeur ASCII (décimale/numérique) du caractère de fin de ligne ( \n
) est de 12, donc, l'extrait suivant sera équivalent :
char s[256];
int i;
for (i = 0; i < 256; ++i)
s[i] = 12;
printf("%c\n", s[10]);
Cela ne fonctionne cependant pas (il n'imprime pas une nouvelle ligne) :
char s[256] = {'\n'}; // or {12};
printf("%c\n", s[10]);
car l'effet de {'\n'}
est d'attribuer \n
au premier élément du tableau, et les 255 caractères restants sont remplis avec la valeur 0, quel que soit le type de tableau que vous créez ( char[]
, int[]
ou autre). Si vous écrivez une paire vide de parenthèses {}
tous les éléments seront égaux à 0.
Ces deux affirmations sont donc équivalentes :
char s[256] = {}; // Implicit filling to 0.
char s[256] = {0}; // Implicit filling to 0 from the second element.
Cependant, sans définir le tableau :
char s[256];
Le tableau n'est pas rempli (pas initialisé), donc, chaque élément de s
n'aura rien, jusqu'à ce que vous le remplissiez de valeurs, par exemple, avec un for
.
J'espère qu'avec tous ces exemples, vous avez une vue d'ensemble.