www.mikrocontroller.net

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


Autor: Phillip Hommel (philharmony)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Andreas L. (robotics)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Phillip Hommel (philharmony)
Datum:

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

Autor: Andreas L. (robotics)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Phillip Hommel (philharmony)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe zwei char Arrays, eigentlich beide mit Größe 16.
 char Data[16], Data_old[16] 
in Data kommen neue Daten rein, dann vergleiche ich mit
 if (memcmp(Data_old,Data,16))
       {send_UART(Data)
       }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 ;)

Autor: Andreas L. (robotics)
Datum:

Bewertung
0 lesenswert
nicht 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));

Autor: Phillip Hommel (philharmony)
Datum:

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

Autor: Andreas L. (robotics)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Phillip Hommel wrote:
> ich habe zwei char Arrays, eigentlich beide mit Größe 16.
>
 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)
          }

Autor: Andreas L. (robotics)
Datum:

Bewertung
0 lesenswert
nicht 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)
          }

Autor: Andreas L. (robotics)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Phillip Hommel (philharmony)
Datum:

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

Autor: Andreas L. (robotics)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tipp : ( nur so) immer speicher sauber freigeben und wieder allokieren 
wenn nötig

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.