Edit: OP (ou um editor) silenciosamente mudou algumas das aspas simples na pergunta original para aspas duplas em algum ponto depois de ter fornecido esta resposta.
Seu código resultará em erros do compilador. Seu primeiro fragmento de código:
char buf[10] ; buf = ''
é duplamente ilegal. Primeiro, em C, não existe vazio char
. Você pode usar aspas duplas para designar uma string vazia, como com:
char* buf = "";
Isso lhe dará um ponteiro para uma NUL
string, ou seja, uma string de um único caractere com apenas o NUL
caractere nela. Mas você não pode usar aspas simples sem nada dentro delas - isso é indefinido. Se você precisar designar o NUL
personagem, você deve especificá-lo:
char buf = '\0';
A barra invertida é necessária para remover a ambigüidade do caractere '0'
.
char buf = 0;
realiza a mesma coisa, mas o primeiro é um pouco menos ambíguo de se ler, eu acho.
Em segundo lugar, você não pode inicializar arrays após eles terem sido definidos.
char buf[10];
declara e define o array. O identificador de matriz buf
agora é um endereço na memória e você não pode alterar para onde os buf
pontos por meio de atribuição. assim
buf = // anything on RHS
é ilegal. Seu segundo e terceiro fragmentos de código são ilegais por esse motivo.
Para inicializar um array, você deve fazer isso no momento da definição:
char buf [10] = ' ';
fornecerá um array de 10 caracteres com o primeiro caractere sendo o espaço '\040'
e o restante sendo NUL
, ou seja '\0'
,. Quando uma matriz é declarada e definida com um inicializador, os elementos da matriz (se houver) após aqueles com os valores iniciais especificados são automaticamente preenchidos com 0
. Não haverá nenhum "conteúdo aleatório".
Se você declarar e definir a matriz, mas não inicializá-la, como a seguir:
char buf [10];
você terá conteúdo aleatório em todos os elementos.