[C con Clase] Array de cadenas de caracteres y paso de parámetros en C.

gmh2000 helder1986 en gmail.com
Vie Dic 12 19:04:51 CET 2008


Steven, te agradezco mucho tan cuidada respuesta. Ya sólo se me quedan un par de cables sueltos. Esto es:

PRIMERO:
¿Las constantes no se guardan en memoria como las variables? En algún lado tienen que guardarse, ¿no?
¿szNombre = szNombre[0]? No es más bien: szNombre = &szNombre[0] y quizás también ¿*szNombre = szNombre[0]?


SEGUNDO:
He hecho uso de las soluciones que me habeis planteado tanto Rolando como tú que, aunque no lo veo completamente claro, supongo que son equivalentes en cuanto a la cantidad de memoria reservada.

Código Rolando, simplificado (no del todo correcto por ello):
typedef char (*PCHAR11)[11];

struct string_list
{
  PCHAR11* string_pointers; 
  unsigned int number_of_strings;
} file_names;

PCHAR11* Temp = (PCHAR11*)malloc(++file_names.number_of_strings * sizeof(PCHAR11));
/* Antes de hacer lo siguiente añadiríamos la nueva cadena */
file_names.string_pointers = Temp;




Tu código (comento también un par de dudas):

/* En la siguiente línea no entiendo muy bien porqué hay que reservar memoria
 ¿Hay que reservar "x" punteros a cadena? No lo veo muy claro */

file_names.pLista = (char **) realloc( file_names.pLista, ++file_names.number_of_strings*sizeof(char *) );
/* Obviamente tampoco entiendo porqué hay que hacer, en el caso de cuando tenemos,
     por ejemplo, 4 cadenas: file_names.pLista = (char **) malloc( 4*sizeof(char *) ); */

file_names.pLista[file_names.number_of_strings-1] = (char *) malloc( strlen(szNombre)+1 );




Espero haberme explicado bien. Y aquí una solución que me gusta. Demasiado fácil me parece a mí que me ha salido. Veremos a ver:

typedef char (*PCHAR11)[11];

struct string_list
{
  PCHAR11* string_pointers; 
  unsigned int number_of_strings;
} file_names;

 PCHAR11* file_names.string_pointers = (PCHAR11*) realloc(file_names.string_pointers, ++file_names.number_of_strings * sizeof(PCHAR11) );



¡Ya estoy impaciente de recibir la respuesta! (que no dándote prisa) Eso es todo, que tengas un muy buen día.


Más información sobre la lista de distribución Cconclase