Étant donné la déclaration suivante:
char inputBuffer[12];
Quelle est la valeur par défaut de l’un ou l’autre caractère dans le tableau? Cela m’intéresse de savoir cela car si, à un moment quelconque, je souhaite effacer une position dans le tableau, j’ai besoin de savoir quelle valeur lui donner.
Les éléments du tableau ont une valeur indéterminée, sauf si le tableau est défini à la scope du fichier ou a static
spécificateur de classe de stockage static
, les éléments du tableau sont initialisés à 0
.
#include char inputBuffer1[12]; // elements initialized to 0 static char inputBuffer2[12]; // elements initialized to 0 void foo(void) { char inputBuffer3[12]; // elements have indeterminate value! static char inputBuffer4[12]; // elements initialized to 0 }
Si char inputBuffer[12];
est global ou statique, il est initialisé avec \0
char inputBuffer1[12]; /* Zeroed */ static char inputBuffer1[12]; /* Zeroed */ int fn() { static char inputBuffer3[12]; /* Zeroed */ }
Si son fonctionnement est local, il contient une valeur résiduelle.
int fn2() { char inputBuffer4[12]; /* inderminate value */ }
Citant ISO / IEC 9899: Projet de comité TC2 – 6 mai 2005 WG14 / N1124
Section 6.7.8 Initialisation (souligné par moi)
10 Si un object ayant une durée de stockage automatique n’est pas initialisé explicitement, sa valeur est indéterminée. Si un object ayant une durée de stockage statique n’est pas initialisé explicitement, alors:
– s’il est de type pointeur, il est initialisé à un pointeur nul;
– s’il est de type arithmétique, il est initialisé à zéro (positif ou non signé);
– s’il s’agit d’un agrégat , chaque membre est initialisé (récursivement) conformément à ces règles;
– s’il s’agit d’une union, le premier membre nommé est initialisé (récursivement) conformément à ces règles.