usa una lista  de punteros a cadenas.<br>cada vez que tenes una nueva cadena haces<br><br><br><br>lista.add(new cadena());<br><br>cadena es un tipo definido por vos que seria char [tamanio];<br><br><br>si lo estas haciendo en C seria <br>
punetro=malloc(sizeof(cadena))<br><br>lista.add(puntero)<br><br>lista seria una estructura con una funcion como miembro, puntero a funcion.<br><br>no me acuerdo el uso exacto de malloc.<br><br><br><br>David<br><br><div class="gmail_quote">
El 10 de diciembre de 2008 10:40, gmh2000 <span dir="ltr"><<a href="mailto:helder1986@gmail.com">helder1986@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Gracias a todos. Me he comido bien el coco pero parece que cada vez la solución va a peor.<br>
<br>
Da un warning y desde luego no funciona:<br>
<div class="Ih2E3d">file_names->string_pointers = &d-> d_name;<br>
<br>
</div>No da errores pero la salida son cientos de caracteres sin sentido:<br>
file_names->string_pointers = (char (*)[11]) d-> d_name;<br>
<br>
Sin errores de compilación pero el programa casca y se cierra solo:<br>
strncpy(file_names->string_pointers[file_names->number_of_strings++], d-> d_name, 11 );<br>
<br>
Todas estas soluciones son SIN usar malloc(). Lo he intentado con esta función pero me da el error de siempre sobre los tipos en las asignaciones (en el código  he puesto mi intento más lógico).<br>
<br>
Por otra parte no entiendo para que hay que reservar memoria con malloc() y/o cuando y porqué hay que liberarla con free().<br>
<br>
Recuerdo que la versión en la que asignaba memoria de la forma "facil" con un array medio-funcionaba. Me explico: cuando pedía que me mostrara las cadenas algunas veces mostraba lo deseado, y otras veces algunas cadenas correctamente y otras en chino. Haber si esto ayuda algo para que me ayudeis. ¿Esto puede ser debido a que la cadenas las copiaba por referencia y no por valor?<br>

<br>
Otra pregunta: ¿al hacer la copia por referencia el recolector de basura no elimina el resto de la estructura donde está contenido d->d_name?<br>
<br>
Haber si me podeis echar el vigésimo-noveno cable. Quizás sea mejor partir de la solución que medio funcionaba, pero supongo que sería muy bueno quedarme con todos estos conceptos claros para un futuro, en cualquier caso...<br>

<br>
Otra duda conceptual es que cuando pongo a las cadenas una longitud de 11, como se ve en el código, es porque la inmensa mayoría tienen 10 caracteres. Reservo 11 porque creo recordar que el último caracter es el /0. ¿Esto lo hago bien? ¿Puede ser el causante de los problemas esto?<br>

<br>
Ahí va el resumen del código, con el intento de malloc:<br>
<br>
<br>
<br>
<br>
struct strings_list<br>
{<br>
  char (*string_pointers)[11];<br>
<div class="Ih2E3d">  unsigned int number_of_strings;<br>
};<br>
<br>
struct strings_list file_names;<br>
<br>
</div>get_file_names("/usr/lib/locale/", &file_names);<br>
<br>
/* Acceso a las cadenas */<br>
for (i = 0, i < file_names.number_of_strings; i++)<br>
{<br>
  muestra_cadena(file_names.string_pointers[i])<br>
<div class="Ih2E3d">}<br>
<br>
<br>
<br>
<br>
<br>
void get_file_names(const char *directory, struct strings_list *file_names)<br>
{<br>
   struct dirent *d;<br>
   struct stat buf;<br>
   DIR *dir;<br>
   file_names-> number_of_strings = 0;<br>
   if ((dir=opendir(directory)) == NULL)<br>
   {<br>
      /* error */<br>
   }<br>
<br>
   while ((d=readdir(dir)) != NULL)<br>
   {<br>
      /* The above line avoid infinite loop */<br>
      if (strcmp(d->d_name,".")!=0 && strcmp(d-> d_name, "..")!=0)<br>
      {<br>
</div>      /* la línea de abajo da mi error preferido: incompatible types in assignment */<br>
      file_names->string_pointers[file_names->number_of_strings] = (char *) malloc(11* sizeof(char));<br>
                strncpy(file_names->string_pointers[file_names->number_of_strings++], d-> d_name, 11 );<br>
<br>
      }<br>
<br>
   }<br>
<br>
   closedir(dir);<br>
<div><div></div><div class="Wj3C7c"><br>
}<br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br> (\__/) <br>(='.'=)This is Bunny. Copy and paste bunny into your <br>(")_(")signature to help him gain world domination. <br><br>