Kopie eines void *buffer

#1735345
Lesenswert?

Heinz schrieb:
> ich habe es jetzt so umgebaut das ich den Typ weiss. Und nu?

Immernoch memcpy.


Und mit void-Pointer geht das trotzdem. Zumindest meiner Meinung nach:
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <string.h>
4

5
int main()
6
{
7
  const int myLength = 11;
8
  char myString[myLength] = { "Hello Welt" };
9

10
  void* firstPtr = myString;
11
  void *myMemory = malloc(myLength);
12

13
  printf("First: %s\n\r", (char*)firstPtr);
14

15
  memcpy(myMemory, firstPtr, myLength);
16

17
  printf("First: %s\n\r", (char*)firstPtr);
18
  printf("Memory: %s\n\r", (char*)myMemory);
19

20
  free(myMemory);
21

22
  return 0;
23
}

Wichtig ist halt, dass irgendwo ein Puffer mit genügend Speicher bereit 
liegt.
Gast #1735368
Lesenswert?

Ich versuche es mal besser zu beschreiben.

Ich habe eine Funktion die mittels eines void* pointers auf einen Buffer 
zeigt des Typ nicht sofort fest gestanden ist. Nun habe ich es so 
umgebaut das der Typ klar ist. StruktausUint8VerschiedenerVariablen.

Zunächt möchte ich eine Kopie des kompletten Inhaltes machen auf diesen 
der Pointer zeigt, da ich anshcließend im original buffer änderungen 
mache.

Nach einer anschließenden Überprüfung ob die Änderungen sinn machen 
bleibt das geschriebene oder ich muss eben den Buffer mit der 
Sicherheitskopier wieder zurück setzen.
#1735377
Lesenswert?

Oder an die Funktion nicht nur den Zeiger übergeben, sondern auch die 
Länge.
Dann kann sich die Funktion Speicher holen (wie auch immer) und
darin die Kopie wie vorgeschlagen mit memcpy anlegen.
Dadurch ist der Funktion der eigentliche Typ egal, und sie kann mal mit
dem einen und mal mit dem anderen Typ verwendet werden.
Eigentlich bin ich nur selten ein Freund von memcpy (meist hat
man einen Designfehler, wenn man memcpy nehmen will), aber
vielleicht macht es hier wirklich Sinn.
#1735396
Lesenswert?

Wenn es wirklich ein Puffer ist, und womöglich der auch nicht
ganz gefüllt ist, macht memcpy sicher Sinn.

Ich weiß aber immer noch nicht, was er wirklich kopieren will.
Deshalb habe ich da so meine Zweifel.
Ich bezweifle sogar, daß er selber weiß, was er will :-)
#1735440
Lesenswert?

Lord Ziu schrieb:
> Klaus Wachtler schrieb:
>> (meist hat
>> man einen Designfehler, wenn man memcpy nehmen will)
>
> Wie kopierst du sonst Buffer? Gibt's da noch andere Techniken, die
> ähnlich effizient sind?

Kommt drauf an. Wenn seine Daten tatsächlich ein Array sind, dann ist 
memcpy schon ok.
Handelt es sich um Strukturen, dann ist es meistens vernünftiger ganz 
einfach die Objekte umzukopieren.

Die ganze Aufgabenstellung: Ich weiß nicht worauf etwas zeigt, will es 
aber kopieren, klingt danach, als ob der ganze Ansatz höchst 
unausgegoren ist. Da muss ich Klaus absolut Recht geben.

Sobald void Pointer im Spiel sind (ausser für solche Dinge wie die 
mem... Funktionen), ist meistens Feuer am Dach. Von daher dürfte in 
diesem 'kleinen Problem' noch ein 'großes Problem 'lauern, welches 
demnächst unbedingt raus will.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren