[C con Clase] Punteros y Arrays

Abel oabel5 en yahoo.de
Mie Mar 18 09:03:39 CET 2009


Hola Steven,
parece que mi mensaje no se publicó, lo envío nuevamente:
Es posible lo siguiente:
 char texto[20]="Hola& amigos";
 char temp[20];

sscanf(texto,"%[^&]&",temp);

aqui temp almacena "Hola" e ignora "&",
es posible decirle que ignore una cadena, por ejemplo:

sscanf(texto,"%[^Hola]Hola",temp);
Gracias.
Abel.


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


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