Editar: OP (o un editor) cambió silenciosamente algunas de las comillas simples en la pregunta original a comillas dobles en algún momento después de que proporcioné esta respuesta.
Su código resultará en errores del compilador. Tu primer fragmento de código:
char buf[10] ; buf = ''
es doblemente ilegal. Primero, en C, no existe un vacío char
. Puede usar comillas dobles para designar una cadena vacía, como con:
char* buf = "";
Eso le dará un puntero a una NUL
cadena, es decir, una cadena de un solo carácter con solo el NUL
carácter en ella. Pero no puede usar comillas simples sin nada dentro, eso no está definido. Si necesita designar el NUL
personaje, debe especificarlo:
char buf = '\0';
La barra invertida es necesaria para eliminar la ambigüedad del personaje '0'
.
char buf = 0;
logra lo mismo, pero creo que el primero es un poco menos ambiguo de leer.
En segundo lugar, no puede inicializar matrices después de haberlas definido.
char buf[10];
declara y define la matriz. El identificador de la matriz buf
es ahora una dirección en la memoria y no puede cambiar los buf
puntos a través de la asignación. Entonces
buf = // anything on RHS
es ilegal. Su segundo y tercer fragmento de código son ilegales por este motivo.
Para inicializar una matriz, debes hacerlo en el momento de la definición:
char buf [10] = ' ';
le dará una serie de 10 caracteres con el primer carácter de ser el espacio '\040'
y el ser de descanso NUL
, es decir, '\0'
. Cuando una matriz se declara y define con un inicializador, los elementos de la matriz (si los hay) más allá de los que tienen valores iniciales especificados se rellenan automáticamente con0
. No habrá ningún "contenido aleatorio".
Si declara y define la matriz pero no la inicializa, como se muestra a continuación:
char buf [10];
tendrás contenido aleatorio en todos los elementos.