No tiene caso utilizar memset en la forma indicada ya que tiene el mismo efecto que la asignación:
cadena[0] = '\0';
Para verificar si el array almacena una cadena vacía basta con verificar el valor de su primer elemento:
if (cadena[0] == '\0'){
/* Cadena vacia */
}else {
/* Al menos un caracter */
}
Un saludo
El mismo efecto no tiene, aparentemente sí, pero en cadena[1] sigue estando la 'e' y así sucesivamente hasta el carácter nulo de final de cadena. Depende de lo que quieras hacer con la cadena utilizas una u otra manera solo que la que dice rir3760 te sustituye el primer carácter por el final de línea, es obvio que la cadena quedaría vacía. Y yo sustituyo todos los elementos del array por 0. Así que quedaría igual solo que rir3760 tiene en el primer elemento un 0 y en los demás lo mismo: Caracter Nulo + "exto que desees" + Caracter Nulo , y yo en todos un 0, ya depende de lo que quieras hacer después con la cadena.
EDITADO:Para convertir de entero a cadena no puedes hacer un cast directamente tienes que utilizar por ejemplo la función sprintf:
int p = 12;
char cad[100];
sprintf(cad
, "El numero actual es: %dapresiamos", p
);
Despliega unos garabatos raros porque un int no contiene los valores numericos como cadena, en una cadena, cada byte es una letra, en un int los 4 bytes conforman el número de 32 bits. Entonces al esperar strcat una cadena, se pone a buscar el carácter nulo y hasta que no lo encuentra te concatena carácteres raros.
¡Un saludo!