[C con Clase] Array de cadenas de caracteres y p aso de parám etros en C.

srd4121 en njit.edu srd4121 en njit.edu
Dom Dic 14 23:16:18 CET 2008


Hola gmh,

Mensaje citado por: gmh2000 <helder1986 en gmail.com>:

> 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.

Bueno, no he intentado convencerte de que uses mi solución. Simplemente expuse 
las ventajas y desventajas de usar un método u otro.

> Reescribo Steven-chiste malo:

Sí; ya lo sé :D

Veamos las implementaciones importantes.

> 
> --------
> 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? */
> 

En general, sí. Sin embargo, el lenguaje C/C++ garantiza que 'char' ocupa 1 
byte. Para los demás tipos fundamentales, no se garantiza la cantidad de bytes 
que ocupará un tipo de dato, aunque sí se garantiza la relación de cantidades 
entre los tipos fundamentales. Esto es,

char <= short int <= int <= long int
float <= double <= long double

En C++, se añaden los tipos 'bool' y 'wchar_t', por lo que el esquema es:

bool <= char <= wchar_t <= short int <= int <= long int

> 
> /* 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
> ----------------

Todo está bien.

> ___________
> Si esto ya está bien, ya sólo me queda marearme con los pasos de
> parámetros y liarme con señales. ¿Sobreviviré?
> 

¡Ánimo! Seguro que lo consigues.


Hasta otra,

Steven





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