[C con Clase] como crear cadena de bytes?

Programante programante en gmail.com
Vie Mar 9 16:14:53 CET 2007


J HU escribió:
>
> Gracias de nuevo.
>
> Esta opcion de poner el buffer al final la habia pensado, pero eso de 
> reservar la memoria, que se haga de manera contigua, no se si se hace 
> directamente, ya por defecto la coge contigua al struct o debo hacer lago en 
> especial....
>   
No hay que hacer nada. Cuando malloc() te da X bytes, te los da 
seguidos. En contraposición a cuando haces varias reservas y las enlazas 
mediante punteros. Solo estaba explicando el truco que hace que esto 
funcione.
>  
> Y despues aunque no quisiera parecer pesado, en el caso se no poder hacer el 
> envio de la estructura, por lo que sea, que tenga 3 char* diferentes o otros 
> tipos de estructuras :
>
> struct EnterosYCadena {
>    int i;
>    int j;
>    char *str1;
>    int longStr1;
>    char *str2;
>    int longStr2;
>    char *str3;
>    int longStr3;
>    otraEstructura *otra;
> }* buf;
>
> Habria alguna manera de convertirlo a bytes o todo se haria a base de 
> "memcpy"?
>   
Podrías hacer

struct EnterosYCadena {
   int i;
   int j;
   int longStr1;
   int longStr2;
   int longStr3;
   otraEstructura otra;
   char str[];
}* buf;

y acceder a Str1 con buf->str, a Str2 con buf->str + buf->longStr1+1, y a Str3 con   
buf->str + buf->longStr1+1 + buf->longStr2 + 1 (estoy asumiendo que cada una de las cadenas tiene un nulo al final, en lugar de detectar el final sólo por la longitud).


Ya te expliqué la idea, lo demás son variaciones según lo complicado de 
la estructura. Puedes usar structs alargándolos,  memcpy o ambas cosas.





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