Edit : OP (ou un éditeur) a silencieusement changé certains des guillemets simples dans la question originale en guillemets doubles à un moment donné après que j'ai fourni cette réponse.
Votre code entraînera des erreurs de compilation. Votre premier fragment de code :
char buf[10] ; buf = ''
est doublement illégale. Tout d'abord, en C, il n'existe pas d'objet 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 un NUL
c'est-à-dire une chaîne à un seul caractère avec seulement l'élément NUL
personnage. Mais vous ne pouvez pas utiliser de guillemets simples sans rien à l'intérieur - c'est indéfini. Si vous devez désigner le NUL
vous devez le spécifier :
char buf = '\0';
La barre oblique inverse est nécessaire pour éviter toute ambiguïté par rapport au caractère '0'
.
char buf = 0;
accomplit la même chose, mais la première est un peu moins ambiguë à lire, je pense.
Deuxièmement, vous ne pouvez pas initialiser les tableaux après qu'ils ont été définis.
char buf[10];
déclare et définit le tableau. L'identifiant du tableau buf
est maintenant une adresse dans la mémoire, et vous ne pouvez pas changer l'endroit où buf
points grâce à l'affectation. Donc
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 étant l'espace. '\040'
et le reste étant NUL
c'est-à-dire, '\0'
. Lorsqu'un tableau est déclaré et défini avec un initialisateur, les éléments du tableau (s'il y en a) après ceux qui ont des valeurs initiales spécifiées sont automatiquement remplis de 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.