Moin, könnte ich memcpy auch anwenden, wenn ein array kleiner ist als das andere? also zb memcpy(array1[16],array2[8],8). Wenn ich das richtig verstanden habe, dann müßte damit doch vom zeiger "array2" aus die nächsten 8 byte zu den nächsten 8 byte ab Zeiger "array1" kopiert werden. Stimmt das so?
sich wort heißt " malloc" "calloc" "realloc" damit kannst du Speicher dynamisch erweitern, wenn du versuchst ein großes in ein kleines Array , ola dann knallts. :) Gruß Andreas
klar, das geht nicht, in meinem fall ist aber das ziel auf jeden fall größer als die quelle, geht das dann?
so kann man das nicht erkennen , von welchem typ sind die Arrays ? Wenn sich im 2.Array Array eine Struktur verbirgt stehst du schon da. vieleicht kannst du mal den Hintergrund erklären.
ich habe zwei char Arrays, eigentlich beide mit Größe 16.
1 | char Data[16], Data_old[16] |
in Data kommen neue Daten rein, dann vergleiche ich mit
1 | if (memcmp(Data_old,Data,16)) |
2 | {send_UART(Data) |
3 | }memcpy(Data_old,Data,16) |
ob sich seit dem letzten mal senden Data geändert hat, und nur wenn ja, wird gesendet. Soweit so gut. Und jetzt wo ich hier so vor mich hin tippe hats sich auch schon geklärt. Muß auf jeden fall gleich groß sein. Uhrzeitbedingtes deppentum ;)
Beispiel zum Verständnis int *c = new int[10]; int *d = new int[10]; // copy for (i = 0; i < 10; i++) { d[i] = c[i]; } // äquivalent memcpy(d, c, 10*sizeof(int));
den teil 10*sizeoff(int) hab ich noch nich verstanden. Sizeoff array gibt mir doch auch die spaltenzahl zurück oder?
Phillip Hommel wrote: > ich habe zwei char Arrays, eigentlich beide mit Größe 16. >
1 | char Data[16], Data_old[16] |
> in Data kommen neue Daten rein, dann vergleiche ich mit > [c] if (memcmp(Data_old,Data,16)) > {send_UART(Data) > }memcpy(Data_old,Data,16) if (Data_old == Data) // wenn gleich dann sende { send_UART(Data); } else // sonst copiere { memcpy(Data_old,Data,16) }
besser else // sonst copiere { //besser erst prüfen // sizeof(data_old) >= sizeof(data) // dann malloc oder realloc speicher + oder - erst dann ! memcpy(Data_old,Data,16) }
Phillip Hommel wrote: > den teil > 10*sizeoff(int) > hab ich noch nich verstanden. > Sizeoff array gibt mir doch auch die spaltenzahl zurück oder? 10 X Speicher für einen integer wert benötigt
ich muß die größe nicht Überprüfen, sie ist in meinem Fall sichergestellt. Danke für die Tips
Tipp : ( nur so) immer speicher sauber freigeben und wieder allokieren wenn nötig
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.