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 NULchaîne, c'est-à-dire une chaîne à un seul caractère contenant uniquement le NULcaractè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 NULpersonnage, 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 bufest maintenant une adresse en mémoire et vous ne pouvez pas changer où bufpointe 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.