Ver Mensaje Individual
  #2 (permalink)  
Antiguo 30/11/2010, 05:02
fcoredo
 
Fecha de Ingreso: noviembre-2010
Mensajes: 38
Antigüedad: 13 años, 5 meses
Puntos: 2
Respuesta: Punteros y estructura dirent

Según la documentación de readdir: The data returned by readdir() is overwritten by subsequent calls to readdir() for the same directory stream.

En tu ejemplo, lo que copias en "carpetas" son punteros (no el contenido de la cadena). Como el contenido se sobreescribe con cada llamada de readdir, en realidad terminas con 100 punteros a la misma posición de memoria (lo puedes comprobar haciendo un printf("%p\n", cadenas[x]); Verás que seguramente todos apuntan a la misma posición.

Lo que tienes que hacer, es cambiar:

carpetas [ x ] = dirp->d_name;

por

carpetas [ x ] = strdup(dirp->d_name);

Pero no olvides liberar la memoria cuando no la necesites más, ya que cada strdup tiene un malloc implícito:

for(...)
{
free(carpetas[x]);
}