[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