Como uso un *char dentro de un struct?

Iniciado por AXA, 25 Octubre 2021, 05:42 AM

0 Miembros y 1 Visitante están viendo este tema.

AXA

Yo declaro...
struct tclist { long pred, post;
                    unsigned char  *data[20];
};
tlist clist[1000];
void main(){
clist[1].pred=10;
clist[1].*data="hola";
}
este clist[1].*data no funciona. Yo hice una rutina para cargarlo. pero no hay una forma
directa. y luego para leerla?.
para ETERNAL IDIOL (que sos un idolo), ya resolvi usando cadenas usando este array.
Ya termino el LISP. Uso pocas instrucciones para el agedres. Me falta si esto que pregunto.

Eternal Idol

#1
El primer indice de un array es el 0.

Las cadenas no son unsigned y o la estructura tiene un puntero (por lo que apunta a memoria que reservas fuera de la misma) o tiene un array de caracteres de un tamaño fijo. En este caso declaraste 20 punteros a unsigned char. ¿Es eso lo que querias?

Código (c++) [Seleccionar]
clist[0].data[0] = "hola";

¿O una cadena de 20 caracteres? Si era esto ultimo:
Código (c++) [Seleccionar]
char  data[20];

Tenes que COPIAR la cadena, no asignarla. De esta manera un poco enrevesada se evitan problemas de buffer overflow (seguramente las cadenas de entrada no seran hola siempre ni tendran un tamaño fijo):
Código (c++) [Seleccionar]
strncpy(clist[0].data, "hola", sizeof(clist[0].data) - 1);
clist[0].data[sizeof(clist[0].data) - 1] = 0;
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

AXA

Gracias, ya la habia copiado. Pero tal vez existia otra forma. Me hice mi propia rutina de carga y una variable gloval. que la asigno antes.

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón