Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/07/2006, 20:06
IEN
 
Fecha de Ingreso: julio-2006
Mensajes: 1
Antigüedad: 18 años, 8 meses
Puntos: 0
Ayuda puntero a char dentro de una estructura

Hola mi problema es el siguiente yo tengo una estructura

typedef struct{
int x;
int y;
} COORD;

typedef struct{
COORD coord1;
COORD coord2;
char *text;
} TEXTBOX;



En el main yo tengo


TEXTBOX *textbox = malloc (sizeof(TEXTBOX)*1);




y luego hago lo siguiente


textbox[0].coord1.x = 0;
textbox[0].coord1.y = 0;
textbox[0].coord2.x = 100;
textbox[0].coord2.y = 100;
textbox->text = malloc (sizeof (char) * 10); // los textbox pueden tener
hasta 9 letras sin contar el null final
memset(textbox[0].text,'\0',10);//Lo lleno de nulls para limpiar la cadena y asegurarme que las letras que ingrese tengan final

Tecnicamente estoy creando un puntero a un tipo, que es textbox, y luego reservo la memoria para tener uno solo de esos tipos...
Luego digo que el puntero a char, o sea el texto del textbox, reserver en memoria capacidad para 10 chars....

textbox apunta a un tipo TEXTBOX maloqueado en memoria y de ese tipo textbox text apunta a 10 chars maloqueados

esto
textbox[0].text[0]="a";

Me tira error :S No portable pointer conversion :S... no entiendo porque !...
ademas si utilizo el watch y pongo me va devolviendo esto...
textbox[0].text[0]='\0'
textbox[0].text[1]='\0'
textbox[0].text[2]='\0'
textbox[0].text[3]='\0'
textbox[0].text[4]='\0'

ahora bien... si yo hago esto

textbox[0].text="a"

no me tira error, pero se produce algo medio extraño quedando esto
textbox[0].text[0]='a'
textbox[0].text[1]='\0'
textbox[0].text[2]='['
textbox[0].text[3]='f'
textbox[0].text[4]='¿'
como que la memoria se llenara de basura :S...


Sinceramente no entiendo que carajo pasa :S... logicamente esta bien pensado pero algo ta fallando :S
Lo que me da bronca es que yo tambien tengo esto...



typedef struct{
COORD coord1;
COORD coord2;
int cheked;
int pressed;
} CHECK;

typedef struct{
COORD coord1;
COORD coord2;
int elementos;
int frame;
CHECK *check;
} CHECKBOX;



CHECKBOX *checkbox = malloc(sizeof(checkbox)*1);

checkbox[0].coord1.x =0;
checkbox[0].coord1.y =0;
checkbox[0].coord2.x =10;
checkbox[0].coord2.y =10;
checkbox[0].frame = 1;
checkbox[0].elementos = 4;

checkbox->check = malloc(sizeof(CHECK)* checkbox[0].elementos);
for (n=0; n<checkbox[0].elementos; n++){
checkbox[0].check[n]=;

//Aca dentro le meto todos los datos a los checks no es importante
}


Ahora bien el segundo cajo es todavia mas complejo que el primero pero no me tira error de puntero ni nada :S

no entiendo porque no puedo manejar la cadena como vector :S... lo peor es que cuando el puntero a char no esta dentro de una estructura

char *cadena;

cadena = malloc(sizeof(char)*10);
memset(cadena,'\0',10);
cadena[0]="H";
cadena[1]="O";
cadena[2]="L";
cadena[3]="A" ;


ESTO SI ES VALIDO !




PORQUEEEEEEEEEEEEEEEEEEEE

PD: El lenguaje es C :P... y el compilador que uso es el borland turbo c++ 3.0



saludos y gracias de antemano ^^