Ü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.