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

Rolando Kindelan Nuñez rkindelan en uci.cu
Dom Dic 14 16:21:48 CET 2008


Hola gmh, en el código que has escrito solo veo 2 errores, ambos dos conceptuales el primero cdo dices

>file_names.string_pointers[file_names.number_of_strings - 1] = (char *) malloc(11 * sizeof(char));

Debería ser: 

// nota PCHAR11 es un nombre Nuevo para el tipo char (*) [11], puntero a exactamente un arreglo de char de 11 caracteres

file_names.string_pointers[file_names.number_of_strings - 1] = (PCHAR11) malloc(11 * sizeof(PCHAR11)); 

Esta línea es la que te digo que le falta al código anterior, porque en realidad estás almacenando memoria para file_names.number_of_strings elementos de tipo PCHAR11, pero cada elemento de ese arreglo lo que tiene es basura, por eso es necesario asignarle un dato de tipo PCHAR11 válido, para poder asignarle la cadena con strcpy(). Pero para usar esta función no puedes simplemente copiarle un char* a un dato de tipo PCHAR11 eso sería como: 

char a[11] = "1234567890";
char (*b)[11];

si haces esto b = a te dará un error porque b es un puntero a un dato de tipo a, debes o hacer *b = a o b = &a;

Seria  intentar copiarle un dato int a un int*, es por eso que necesitas desreferenciar el puntero. 

Y el otro cuando dices:

> strcpy(file_names.string_pointers[file_names.number_of_strings - 1], "nueva_cadena");

Tienes que desreferenciar el puntero (como explico mas arriba) que tienes en la posición file_names.number_of_strings - 1 .

strcpy(*(file_names.string_pointers[file_names.number_of_strings - 1]), "nuevacaden");


Saludos y espero que todo haya quedado aclarado.


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