Übergabe char- Variable an Funktion



  • Hallo,

    ich bin zwar nicht mehr absoluter Newbie aber ich habe trotzdem ein kleines Verständnisproblem:

    Zuerst habe ich mir Daten aus einer Struktur in eine ausreichend grosse char[]- Variable kopiert. Dann wollte ich diese Variable an eine Funktion übergeben, die mir die Daten über einen Socket verschickt. Da aber in der char[]-Variablen nach dem Kopieren zwischendrin auch "Nullen" vorkommen wird nicht alles korrekt übergeben:

    int DatenSenden(char *Sendedaten)
    {
    //(...)
    return 0;
    }
    
    int DatenSchreiben()
    {
    struct DATEN
    {
       //...hier stehen ein paar Variablen
    }Daten;
    char MeinChar [1000];
    
    //(..)
    //Struktur-Elemente bekommen ihre Daten
    //(..)
    
    //kopieren
    memcpy(&MeinChar [10],&Daten,sizeof(DATEN));
    
    //Jetzt Funktionsaufruf:
    DatenSenden(MeinChar);
    return 0;
    }
    

    In der Funktion 'DatenSenden()' steht mir aber jetzt nur ein "abgeschnittener" Teil der übergebenen char-Variablen zur Verfügung.

    Was mache ich denn da falsch?

    Vielen Dank & Grüsse

    Bianca



  • Hi,

    ich glaub, das ist das Problem:

    sizeof(DATEN));
    

    Das sind ja nur die Anzahl der Bytes von den Variablen in der Struktur.
    Und nicht die Anzahl, der chars die du kopieren willst.



  • Ja, das klingt ersteinmal einleuchtend..

    aber im Grunde will ich doch nur Strukturen hin und her kopieren und das hatte ich bisher immer so gemacht:

    (..)
    //Strukur hinein
    memcpy(&szChar[10],&Daten,sizeof(DATEN));	
    //Struktur löschen
    memset(&Daten,0,sizeof(DATEN));
    //Struktur lesen
    memcpy(&Daten,&szChar[10],sizeof(DATEN));
    (..)
    

    nur ist jetzt das Problem, dass mir nicht das vollständige char-Array übergeben wird, weil zwischendrin wahrscheinlich "Nullen" enthalten sind, denk ich....

    Gruß

    Bianca



  • Also das kommt auf die Funktion an, ob die bei einer Null stoppt.
    Das sind meist dir string-Funktionen wie strcpy ...

    memcpy tut es aber jedenfalls nicht, sondern kopiert immer die x-Bytes.

    Bist du dir sicher, dass dein Array nicht doch richtig ankommt?
    Wie stellst du das denn fest?



  • ich debugge mein Programm, kopiere mir den Inhalt der übergebenen char[]- Variablen in eine extra- Variable und sehe, dass nicht alles mitgekommen ist.. leider...

    aber im Grunde ist es folgende (Übergabe-) Problem:

    (...)
    char szPuffer[1000];
    typedef struct
    {
       int Anzahl;
       int Nummer;
       int Ergebnis;
       char szNamen[20];
    }DATEN;
    
    DATEN Daten;
    
    Daten.Anzahl=1;
    //usw.
    memcpy(&szPuffer[10],&Daten,sizeof(DATEN));
    //wenn man an dieser Stelle mal mit strlen() nachfragt, werden alle 'Zeichen' //gezählt, bis eben eine '0' vorkommt...
    
    Funktion(szPuffer);
    (..)
    void Funktion(char *string)
    {
    //Nullen beschneiden den 'string'
      char szstring[1000];
      memcpy(&szstring,&string,1000);
    }
    

    Vielleicht kann man dann halt nicht anders, da 'char- Variablen' nun mal mit '0' terminiert werden, aber das is jetzt schon doof... 😞

    MfG
    Bianca



  • Bianca__ schrieb:

    memcpy(&szstring,&string,1000);
    

    mach mal die &'s weg. dann läufts sicher besser



  • ...*schäm*... habs grad auch gemerkt... *werd rot*

    ..sorry, sorry, sorry ....

    🙄

    Vielen Dank

    Bianca *schäm*



  • Bianca__ schrieb:

    ...*schäm*... *werd rot*
    ..sorry, sorry, sorry ....
    *schäm*

    nicht schlimm, was meinste was ich mir schon geleistet habe 😉



  • Du könntest dir das Kopieren auch sparen, indem du einfach eine union verwendest.


Anmelden zum Antworten