Forum: Mikrocontroller und Digitale Elektronik memcpy bei unterschiedlichen Größen


von Phillip H. (philharmony)


Lesenswert?

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?

von Andreas L. (robotics)


Lesenswert?

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

von Phillip H. (philharmony)


Lesenswert?

klar, das geht nicht, in meinem fall ist aber das ziel auf jeden fall 
größer als die quelle, geht das dann?

von Andreas L. (robotics)


Lesenswert?

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.

von Phillip H. (philharmony)


Lesenswert?

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 ;)

von Andreas L. (robotics)


Lesenswert?

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));

von Phillip H. (philharmony)


Lesenswert?

den teil
10*sizeoff(int)
hab ich noch nich verstanden.
Sizeoff array gibt mir doch auch die spaltenzahl zurück oder?

von Andreas L. (robotics)


Lesenswert?

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)
          }

von Andreas L. (robotics)


Lesenswert?

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)
          }

von Andreas L. (robotics)


Lesenswert?

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

von Phillip H. (philharmony)


Lesenswert?

ich muß die größe nicht Überprüfen, sie ist in meinem Fall 
sichergestellt.
Danke für die Tips

von Andreas L. (robotics)


Lesenswert?

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
Noch kein Account? Hier anmelden.