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

gmh2000 helder1986 en gmail.com
Dom Dic 14 00:23:15 CET 2008


Steven, yo no entiendo que Rolando quiera decir que su código es incorrecto, sino que se le olvidó reservar memoria para la nueva cadena. Si está mal corrígenos, pues yo también lo veo bien para mi caso, en el que casi todas las cadenas son de 10 caracteres (más el /0), y ninguna mide más de 10. A partir de ahí reescribo el código comentándolo según lo aprendido. Por favor, si tengo algún concepto incorrecto díganmelo. Ahí va:


typedef char (*PCHAR11)[11];

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


... add_cadena()
{

/* Ahora necesitamos un "índice" más a la cadena que vamos a añadir. Incrementamos memoria para poder almacenar este puntero a cadena de 11 */

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


/* 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 * sizeof(char));

/* Nota: no hago tu strlen(szNombre)+1 porque no me vale la pena el conste computacional de calcular la longitud vs memoria desperdiciada */

/* Ahora sólo quedaría copiar la nueva cadena */
strcpy(file_names.string_pointers[file_names.number_of_strings - 1], "nueva_cadena");

}


__________
Haber si eso ya está bien. No lo puedo probar yo mismo en mi compilador porque los fines de semana voy para mi pueblo y aquí no tengo el tinglado necesario.

Un saludo. Carlos.


El pasado 2008-12-13 11:21:47, Steven Davidson escribió:
 
SD> Bueno, Rolando te ha explicado en un su contestación que definir y 
SD> usar 'PCHAR11' de esta manera no es correcto. En todo caso, podrías haber 
SD> hecho esto,
SD> typedef char CHAR11[11];
SD> typedef CHAR11 *PCHAR11;
SD> ...
SD> PCHAR11 string_pointers;  // = CHAR11 *string_pointers;
SD> y luego,
SD> PCHAR11 Temp = (PCHAR11) malloc( ++file_names.number_of_strings * sizeof
SD> (CHAR11));


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