Me perdi un poco, el problema lo tenes en el ultimo codigo que subiste??? o al querer hacer:
Código C:
Ver originalchar *nombre = mi_nombre();
puts(mi_nombre
); /* <--- ojo le estas pasando la direccion de una funcion */
??
Saludos
PD: faltaria hacer un free(nombre);