Laden...

C - void-Pointer mit Typ-Größe auslesen

Erstellt von Palladin007 vor 10 Jahren Letzter Beitrag vor 10 Jahren 892 Views
Palladin007 Themenstarter:in
2.078 Beiträge seit 2012
vor 10 Jahren
C - void-Pointer mit Typ-Größe auslesen

Moin,

ich habe in C einen void-Pointer, der auf ein Array mit unbekanntem Typ zeigt.
Nun möchte ich die einzelnen Elemente des Arrays neu beschreiben.

Zusätzlich habe ich die Anzahl Elemente in diesem Array, sowie die Speichergröße, die ein einzelnes Element benötigt.

Meine Frage nun: Wie kann ich die einzelnen Array-Elemente gezielt ansprechen und neu schreiben, ohne den konkreten Typ des Arrays zu kennen?
Im Prinzip habe ich ja alle nötigen Informatonen um von der Speicheradresse z.B. 5 (Anzahl Elemente) je 10 Bytes (Größe eines Elementes) zu lesen.
Oder ich lese nur einmal 10 Bytes und habe damit das erste Element. Springe ich nun wieder zur vorherigen Adresse und screibe 10 Bytes, habe ich dort ein neues Element.

Aber wie kann ich das machen?

Gruß

PS:
Wen es interessiert, ich möchte eine verkettete untypisierte Liste schreiben.
Das habe ich so gelöst, dass ich in einer Struktur immer einen Pointer zu einem Element und zusätzlich die Pointer zu dem vorherigen, sowie dem folgenden Element.
Jedes Element wird nicht als void-Pointer hinterlegt, sondern als Pointer mit dem Typ einer Struktur, die wiederum den Pointer zum tatsächlichen Element und der Größe des Typs enthält.

So kann ich auch Strukturen als Typ verwenden, ohne den Typ selber zu kennen.

Hinzu fügen oder entfernen geht, aber ich kann es nicht in ein Array schreiben.

W
872 Beiträge seit 2005
vor 10 Jahren

Wenn ich 10 Bytes lese, habe ich immer Angst, daß Du nicht über Alignment nachgedacht hast....

S
248 Beiträge seit 2008
vor 10 Jahren

Wenn du den Zeiger und die Größe hast, sollte es so gehen:

VOID SetArrayElement(LPVOID dst, SIZE_T elementSize, INT index, LPVOID src)
{
	memcpy((LPBYTE)dst + (index * elementSize), src, elementSize);
}

Grüße
spooky

Palladin007 Themenstarter:in
2.078 Beiträge seit 2012
vor 10 Jahren

Ne, hab ich vorher noch nie was von gehört 😄

So lange bin ich auch noch nicht bei C, das ist bloß aus der Schule entstanden und da langweile ich mich nur, daher wollte ich mal was ausprobieren ^^