char pointer auf structs zeigen lassen



  • ich will einen buffer auf eine struktur zeigen lassen (für WINSOCKET)

    des geht doch normalerweise so

    Mystruct *x;
    char buf[256];
    x=&buf;
    
    oder so???
    Mystruct x;
    char buf[256];
    x=(Mystruct*)&buf;
    

    aber irgentwie spinnt der compiler bei beiden varitionen!!!



  • Mystruct x, *p;
    p = &x;
    

    😕 😕 😕 😕 😕 😕
    ???
    Oder verstehe ich dich falsch?



  • Beide Varianten sind unlogisch.

    gargamel schrieb:

    Mystruct *x;
    char buf[256];
    x=&buf;
    

    1. sind die Typen nicht kompatibel und 2. ist buf bereits die Anfangsadresse des Arrays.

    oder so???
    Mystruct x;
    char buf[256];
    x=(Mystruct*)&buf;
    [/cpp]

    Du versuchst die Adresse eines char Pointers einer normalen Variablen zuzuweisen. Das kann nicht gehen.

    aber irgentwie spinnt der compiler bei beiden varitionen!!!

    Jaja, immer isses der Compiler 😉



  • der char buf soll aber auf die struktur zeigen



  • und wie kann ichs dann machen



  • und wie kann ichs dann machen



  • char buff[256];
    MyStruct *x = (MyStruct*)buff;
    


  • gargamel schrieb:

    und wie kann ichs dann machen

    So garnicht.
    Erstens sind deine char bufs statische Arrays, die auf nichts anderes zeigen können! (Quasi char * const buf)
    Wenn überhaupt, dann per Pointer auf char und per expliziter Zeigerkonvertierung (ich bezweifle, dass dich das weiterbringt). Das würde dann so aussehen:

    char *p = (char*)&m;
    

    Edit: In C gibts ja gar kein reinterpet_cast<> 😉



  • net schrieb:

    char buff[256];
    MyStruct *x = (MyStruct*)buff;
    

    Der Puffer soll aber auf die Struktur zeigen und nicht umgekehrt 😉



  • machts doch nicht so kompliziert ...

    struct MyStruct m;
    char *p = (char*)&m;
    

    bzw. direkt (wenn ich das richtig verstanden habe soll die ja übers Netz gehen):

    struct MyStruct m;
    send(the_socket, (char*)&m, sizeof m, 0);
    

    Möglicherweise ist der Cast sogar überflüssig in C, bin mir nicht ganz sicher.



  • interpreter schrieb:

    Der Puffer soll aber auf die Struktur zeigen und nicht umgekehrt 😉

    so sehen die codes aus dem ersten posting aber nicht aus.
    dann eben so:

    MyStruct m;
    char *buff = (char*)&m;
    

    aber bei sowas u.ä. immer dafür sorgen dass struct-member alignment auf 1 byte eingestellt ist



  • ich dank euch allen jetzt klappts wunderbar

    mfg gargamel


Log in to reply