#5
No existe el concepto de vacío en un array en C, si tu reservas la memoria con malloc, lo mismo te da un bloque de memoria que ya ha sido usado antes y liberado, y sabe dios que valores tiene, la única excepción son los arrays declarados como globales que se inicializan a 0 todos los elementos, pero estamos en las mismas, no puedes diferenciar de si es que nadie ha tocado el array, o es que alguien le ha metido todo ceros.
#6
No existe null en C. Si fuese una cadena se usa un carácter especial para saber donde termina, si fuese un puntero puedes usar el valor especial NULL (que depende de la implementación pero en la práctica suele equivaler al valor 0) para saber que ha fallado la reserva de memoria, pero no existe el concepto de que un array valga null en todos sus elementos por que no ha sido inicializado.