char array kopieren -> Datenverlust
-
Hallo Leute,
hab mal wieder ein kleines Problem. Ich "mißbrauche" ein char Array um Daten über eine Serielle Schnittstelle an einen µC zu senden.
Ich benutze das char array weil es nur 1 Byte große Elemente hat und dadurch wesentlich kleiner als ein Int-Array ist.
(Ich habe leider auch nicht die Wahl!)Ich nehme also meine Daten, die von 0x00 bis 0xFF gehen und kopiere sie in die char Elemente. Das funktioniert soweit auch ganz gut.
Mein Problem liegt jetzt darin, dass 0x00 dem '\0' enspricht und wenn ich dann mein gefülltes Array an eine Fkt-übergebe, wird ja eine Kopie des char Array erstellt. Und bei dieser Kopie wird nur bis zum ersten '\0' kopiert! D.h. wenn ich in meinem Array die Daten:char arr[20]; arr[0]=0x04; arr[1]=0x04; arr[2]=0x00; arr[3]=0x04; arr[4]=0x04; arr[5]=0x04;...habe, dann habe ich nach dem Kopieren nur noch die ersten 3 Ellemente und den Rest habe ich verloren!

Kann ich des irgendwie verhindern?
Gruß Kiki
PS: Ich benutze MS Windows und BCB V5
-
Hallo
weil das Array dann eben nicht mehr als Array, sondern als Null-Terminierter String behandelt wird.
Du must also eine Funktion aufrufen, die neben dem Pointer auf das Array auch die Anzahl der Elemente übernimmt. Da du aber nichts sagt mit was du sendest noch welche ominöse Funktion du verwendest können wir dir da auch nicht helfen.bis bald
akari
-
Also ich beschreibe nach und nach alle Elemente des char array und dieses übergebe ich dann an die FKt-Write_Comport (mit der Länge)
//beispiel char arr[22]; for(int i=0;i<22;i++) { arr[i]=i; } Write_Comport(arr,length);Funktion Write_Comport:
... strcpy(a,arr); //und hierbei verliere ich bereits meine Daten ... for(int i=0;i<length;i++) //so geht es die Daten in a zu kopieren a[i]=arr[i]; ...Mein Problem ist jetzt noch, dass ich dieses Array noch zur kontrolle in einem Memo ausgebe. Und mit...
Memo1->Lines->Add(a);gibt er mir leider nur wieder bis zum ersten '\0' aus.
-
Benutze memcpy statt strcpy, oder halt deine for-Schleife.
Ein Memo eignet sich nicht zur Ausgabe von Binärdaten. Du müßtest die nicht druckbaren Zeichen umwandeln, beispielsweise in ihren Hexadezimalcode für Informationsgehalt oder in Punkte für Lesbarkeit.
-
...memcpy funktioniert nicht: Keine Übereinstimmung mit (char*, char
gefunden.
Ist aber auch nicht weiter schlimm, da es mit der Forschleife bestens funktioniert.
Und mein eigentliches Problem hat sich auch gelöst. Ich dachte immer, dass ich die Daten bei der Übertragung über die Serielle Schnittstelle auch verlieren würde, aber das ist gar nicht der Fall! (ich hab leider immer nur in dem Memo-fenster geschaut und nicht in der Variable selber
)->Ergo Problem gelöst!
Danke, gruß Kiki
-
Bei memcpy mußt du die char* erst nach void* casten, dann geht auch das.