[C con Clase] Array de cadenas de caracteres y paso de parámetros en C.
gmh2000
helder1986 en gmail.com
Dom Dic 14 18:18:13 CET 2008
Vale, me has convencido para que use tu solución. De todas formas también pongo la otra al final, por quedarme con los conceptos claros. Reescribo Steven-chiste malo:
--------
TU IDEA:
--------
struct strings_list
{
char **string_pointers;
unsigned int number_of_strings;
} file_names;
... add()
{
/* Ahora necesitamos un "índice" más a la cadena que vamos a añadir. Incrementamos memoria para poder almacenar este puntero cadena */
file_names.string_pointers = (char **) realloc( file_names.string_pointers, ++file_names.number_of_strings*sizeof(char *) );
/* Reservamos memoria para la nueva cadena de caracteres, esto es, desreferenciamos la antigua dirección de memoria a un espacio que esté vacío (lo gestiona el sistema operativo). */
file_names.string_pointers = [file_names.number_of_strings-1] = (char *) malloc( 11 );
/* ¿No habría que poner malloc( 11 * sizeof(char) )? ¿Por qué no? */
/* Ahora sólo quedaría copiar la nueva cadena */
strncpy( file_names.string_pointers[file_names.number_of_strings-1], "nueva_cadena", 11 );
}
----------------
IDEA DE ROLANDO
----------------
typedef char CHAR11[11];
typedef CHAR11 *PCHAR11;
struct string_list
{
PCHAR11 string_pointers; // = CHAR11 *string_pointers;
unsigned int number_of_strings;
} file_names;
/* Aumentamos el "bloque" de cadenas */
file_names.string_pointers = (PCHAR11) realloc( file_names.string_pointers, ++file_names.number_of_strings*sizeof(CHAR11) );
/* Ahora sólo quedaría copiar la nueva cadena en el nuevo espacio vacío del bloque que hemos ampliado */
strncpy( file_names.string_pointers[file_names.number_of_strings-1], "nueva_cadena", 11 );
___________
Si esto ya está bien, ya sólo me queda marearme con los pasos de parámetros y liarme con señales. ¿Sobreviviré?
Y ¡gracias!
Más información sobre la lista de distribución Cconclase