Citarcurioso.. pero por que sucede esto?, acaso el compilador se confunde cuando copio memoria de un puntero?No, el compilador hace lo que le dices.
Código [Seleccionar]
char * nombre;
es un puntero a char, una variable que puede guardar una dirección de memoria. Dependiendo de la plataforma; su tamaño suele ser de 32 bits o de 64 bits. Código [Seleccionar]
char nombre[16];
es un array de caracteres de estilo C; puede guardar una sucesión de caracteres, muchas veces con un cero al final; su tamaño es siempre de 16 Bytes (128 bits). No es lo mismo guardar en un archivo una dirección de memoria que guardar una sucesión de caracteres. En el primer caso podrías estar guardando algo como 2127788540 y en el segundo algo como castellanamente.