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); |
|
Forum: PC-Programmierung Problem mit der memcpy FunktionIch 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?
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? 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? Ich tippe mal um sich das hier zu sparen:
Laut https://stackoverflow.com/questions/3751797/can-i-call-memcpy-and-memmove-with-number-of-bytes-set-to-zero sollte das auch so funktionieren. 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?) 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.
|
|