Tus variables "aux" y "txt2" en la funcion "cargalista" son variables locales, luego en tu codigo al hacer algo como
datito.apellido=aux;
simplemente estas copiando el puntero "aux" a tu miembro de estructura pero no el contenido al que apunta, lo que significa que una vez la funcion retorna y la memoria de las variables locales es liberada, ahora tendras lo que se conoce como dangling pointer (puntero colgante), apuntando a memoria desconocida. En este caso entonces necesitas hacer una copia de la memoria a donde apunta el puntero y no del puntero en si, puedes sustituir
datito.apellido=aux;
por
lo mismo con "datito.pais" y lo mismo en tu funcion "agregar"
(*nodo)->dato=datito;
por
memcpy(&(*nodo
)->dato
, &datito
, sizeof(struct s_datos
));
Saludos
EDIT: Olvidé mencionar que igual no tiene mucho sentido y es mejor que te deshagas por completo de las variables “aux” y “txt2” y uses directamente los miembros de la estructura local “datito”
EDIT2: En la funcion "agregar" estoy usando "shallow copy" con la estructura, pero en este caso supongo que una copia profunda es el camino a tomar
memcpy(&(*nodo
)->dato
, &datito
, sizeof(struct s_datos
));
por una llamada a la funcion
void copia_stdatos(t_dato *dest, t_dato *src)
{
strncpy(dest
->apellido
, src
->apellido
, strlen(src
->apellido
) + 1);
dest->dni = src->dni;
}