Un fallo que tienes es que haces la iteración con n a 576, lo cual accede a a[576], posición que no existe, pues solo están las posiciones desde la a[0] hasta a[575], por ello, seguramente te diese un coredumped.
De todas formas, esto se hace mucho más comodo con un for en vez de un while.
char texto[10000];
char a[576];
u32 nt = 0; //Puesto que n y nt aumentan a igual, con usar n nos vale.
u32 p = 0;
u32 n = 0;
char nada = 0; //Caracter nulo supongo.
for (n = 0; n < 576; n++) { //Desde n = 0 hasta n < 576, aumentar n en 1 y repetir el bucle
if(texto[n] == nada) //Esto supongo que lo haces para comprobar si hay valores
break; //incorrectos...
a[n] = texto[n]; //n nos vale para a y texto, pues n y nt siempre valen igual.
}
También te dejo una modificación del tuyo
char texto[10000];
char a[576];
u32 nt = 0;
u32 p = 0;
u32 n = 0;
char nada = 0
while (n < 576) //Mientras n sea menor que 576
{
if (texto[nt] == nada)
break;
a[n] = texto[nt];
n++;
nt++;
}