He probado el código y va perfectamente. El único problema que veo es que cuando imprimes la cadena de caracteres, lo haces con un %c. %c es para caracteres. Para imprimir una cadena tendrías que usar %s:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Nodo {
char* filename;
struct Nodo* sig;
} nodo_t;
void agregar_nodo(nodo_t**p, char* ruta) {
nodo_t* nuevo;
nodo_t* aux;
nuevo = (nodo_t*)malloc(sizeof(nodo_t));
nuevo->filename = ruta;
nuevo->sig = NULL;
if(*p == NULL) {
*p = nuevo;
} else {
aux = *p;
while(aux->sig != NULL)
aux = aux->sig;
aux->sig = nuevo;
}
}
int main() {
nodo_t* nodo = NULL;
nodo_t* aux = NULL;
agregar_nodo(&nodo, "Hola x1");
agregar_nodo(&nodo, "Hola x2");
agregar_nodo(&nodo, "Hola x3");
printf(nodo->filename);
aux = nodo->sig;
while(aux != NULL) {
printf("\n%s", aux->filename);
aux = aux->sig;
}
return 0;
}
También tienes que tener cuidado con lo siguiente: Cuando le envias una cadena de caracteres a agregar_nodo, le tienes que enviar una diferente. Por ejemplo, el siguiente código no haría lo esperado:
int main() {
char cadena[16] = "Codigo";
nodo_t* nodo = NULL;
nodo_t* aux = NULL;
agregar_nodo(&nodo, cadena);
cadena[0] = 'c'; // Ahora cadena vale "codigo"
agregar_nodo(&nodo, cadena);
cadena[6] = 's';
cadena[7] = '\0'; // Ahora cadena vale "codigos"
agregar_nodo(&nodo, cadena);
printf(nodo->filename);
aux = nodo->sig;
while(aux != NULL) {
printf("\n%s", aux->filename);
aux = aux->sig;
}
return 0;
}
El resultado que uno podría esperar es:
Pero en realidad el resultado obtenido es: