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.
Wenn ich 10 Bytes lese, habe ich immer Angst, daß Du nicht über Alignment nachgedacht hast....
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
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 ^^