Forum: PC-Programmierung Problem mit der memcpy Funktion


von user (Gast)


Lesenswert?

Ich habe folgende Problem mit der Funktion memcpy. Warum wird der Inhalt 
von der Adresse 0x10000000 in den buffer kopiert obwohl die Länge 0 ist?
1
static uint8_t buffer[100];
2
memcpy(buffer, 0x10000000, 0);

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

user schrieb:
> Warum wird der Inhalt
> von der Adresse 0x10000000 in den buffer kopiert obwohl die Länge 0 ist?
Warum rufst du memcpy auf, obwohl du nichts kopieren willst?
Und woher willst du wissen, das der Inhalt kopiert wurde und da nicht 
einfach ueberall der gleiche Schrott drinsteht?

von Rolf M. (rmagnus)


Lesenswert?

user schrieb:
> Warum wird der Inhalt von der Adresse 0x10000000 in den buffer kopiert
> obwohl die Länge 0 ist?

Wird er nicht.

PS: Ich wundere mich ja darüber, was für Probleme manche haben. Warum 
willst du einen Block der Größe 0 kopieren? Und warum greifst du auf 
einem PC auf im Quellcode definierte Adressen zu?

von Tek (Gast)


Lesenswert?

Ich tippe mal um sich das hier zu sparen:
1
if( numberOfBytes != 0 ) {
2
    memmove( dest, source, numberOfBytes );
3
}

Laut
https://stackoverflow.com/questions/3751797/can-i-call-memcpy-and-memmove-with-number-of-bytes-set-to-zero
sollte das auch so funktionieren.

von A. S. (Gast)


Lesenswert?

user schrieb:
> Warum wird der Inhalt
> von der Adresse 0x10000000 in den buffer kopiert obwohl die Länge 0 ist

Wer tut das denn (welcher Compiler, welche Maschine) und was kopiert er 
denn (1,2 oder 5 Bytes?)

von Nop (Gast)


Lesenswert?

user schrieb:
> Ich habe folgende Problem mit der Funktion memcpy. Warum wird der
> Inhalt von der Adresse 0x10000000 in den buffer kopiert obwohl die Länge 0
> ist?

Wenn das der Fall ist, dann ist das ein Bug in der verwendeten 
C-Library. Man darf bei memcpy ausdrücklich 0 bytes spezifizieren, was 
üblicherweise vorkommt, wenn die Anzahl der Bytes eine Variable ist, die 
sich zur Laufzeit bestimmt. Man muß keinen Nullcheck machen.

Allerdings müssen die Pointer trotzdem gültig sein, so daß 0x10000000 
zumindest auf dem PC nicht unbedingt funktioniert.

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.