Edit: OP (ou un éditeur) a silencieusement changé certaines des guillemets simples de la question originale en guillemets doubles à un moment donné après avoir fourni cette réponse.
Votre code entraînera des erreurs de compilation. Votre premier fragment de code:
char buf[10] ; buf = ''
est doublement illégal. Premièrement, en C, il n'y a pas de vide char
. Vous pouvez utiliser des guillemets doubles pour désigner une chaîne vide, comme avec:
char* buf = "";
Cela vous donnera un pointeur vers une NUL
chaîne, c'est-à-dire une chaîne à un seul caractère contenant uniquement le NUL
caractère. Mais vous ne pouvez pas utiliser de guillemets simples sans rien à l'intérieur - cela n'est pas défini. Si vous devez désigner le NUL
personnage, vous devez le spécifier:
char buf = '\0';
La barre oblique inverse est nécessaire pour lever l'ambiguïté du caractère '0'
.
char buf = 0;
accomplit la même chose, mais le premier est un peu moins ambigu à lire, je pense.
Deuxièmement, vous ne pouvez pas initialiser les tableaux une fois qu'ils ont été définis.
char buf[10];
déclare et définit le tableau. L'identificateur de tableau buf
est maintenant une adresse en mémoire et vous ne pouvez pas changer où buf
pointe par l'attribution. Alors
buf = // anything on RHS
est illégal. Vos deuxième et troisième fragments de code sont illégaux pour cette raison.
Pour initialiser un tableau, vous devez le faire au moment de la définition:
char buf [10] = ' ';
vous donnera un tableau de 10 caractères, le premier caractère étant l'espace '\040'
et le reste étant NUL
, c'est-à-dire '\0'
. Lorsqu'un tableau est déclaré et défini avec un initialiseur, les éléments du tableau (le cas échéant) après ceux avec les valeurs initiales spécifiées sont automatiquement complétés avec 0
. Il n'y aura pas de "contenu aléatoire".
Si vous déclarez et définissez le tableau mais ne l'initialisez pas, comme dans l'exemple suivant:
char buf [10];
vous aurez un contenu aléatoire dans tous les éléments.