[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