[C con Clase] Punteros y Arrays
Steven Davidson
srd4121 en njit.edu
Mie Mar 18 07:55:40 CET 2009
Hola Abel,
Abel wrote:
> Hola Steven,
> gracias por la respuesta rápida.
De nada; para eso estamo.
> Probé lo que me indicas pero al hacer lo siguiente:
> char (*temp2)[3];
> char **temp3;
>
> scanf("%s",temp2[0]);
> scanf("%s",temp3[0]);
>
> me dá error: Unitialized pointer
Esto será porque no creaste memoria con 'malloc()'. Cuando usamos
punteros o bien apuntamos a otra variable existente o bien creamos
memoria para que el puntero apunte a ella.
> Algo que tampoco entendí, yo creía que cuando escibo asi:
> (*temp2)[3];
> creaba un Puntero que apuntaba a un grupo de tres Arrays
> y asi:
> *temp2[3]
> creaba un grupo de Punteros a tres Arrays.
>
Perdón. No me di cuenta de los paréntesis. La declaración:
char (*temp2)[3];
crea un puntero a un array de 3 elementos de tipo 'char'. Esto implica
que deberás crear memoria para 3 'char' o apuntar a un array existente.
Esto sería,
temp2 = temp1; // no creo que quieras esto
temp2 = (char (*)[3]) malloc( 3 ); // 3 caracteres (bytes)
Para no liarte con esto, aconsejo crear un tipo de dato:
typedef char CADENA3[3];
...
CADENA3 *temp2;
temp2 = (CADENA3 *) malloc( sizeof(CADENA3) );
> Toda esta problemática viene en realidad de un programa que estoy
> escribiendo, en donde quiero hacer lo siguiente:
>
> char texto[20]="Hola Amigos &como& estan";
> char temp[5][20];
> char (*temp2)[20];
> char **temp3;
>
> sscanf(texto,"%[^&]&%[^&]&%[^\0]",temp[0],temp[1],temp[2]);//esto funciona
> sscanf(texto,"%[^&]&%[^&]&%[^\0]",temp2[0],temp2[1],temp2[2]);//esto no funciona
> sscanf(texto,"%[^&]&%[^&]&%[^\0]",temp3,temp3,temp3);//esto no funciona
>
Nuevamente, _DEBES_ crear memoria dinámicamente si usas punteros o como
ya dije antes, puedes usar punteros para apuntar a otra variable que ya
exista.
Espero que esto te sirva.
Steven
Más información sobre la lista de distribución Cconclase