Hola, estoy tratando de usar void * como un tipo de datos genérico en C. Lo que quiero es un mecanismo con el que pueda almacenar cualquier cosa y obtener cualquier cosa. Escribí un código, pero está fallando en el último caso. ¿Puede alguien echar un vistazo al código? Si tiene alguna otra idea, por favor hágamelo saber.Tipo de datos genéricos en C [void *]
Sé lo que intento almacenar, así que en ese momento conozco el tipo de datos, pero durante el nuevo examen solo conozco la dirección y el tamaño de inicio.
Aquí está el código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
static void store(void *destination, void *source, size_t size) {
memcpy ((char*)destination, source, size);
}
static void retrieve (void *destination, void *source, size_t size) {
memcpy (destination, (char*)source, size);
}
void *storage_char_ptr = (void*) malloc (sizeof(char*));
void *storage_int_ptr = (void*) malloc (sizeof(int*));
void *storage_int = (void*) malloc (sizeof(int));
int main() {
int int_in = 65;
void *int_out_ptr;
int *ptr = (int*) malloc (sizeof(int));
memcpy (ptr, &int_in, sizeof(int));
store (storage_int_ptr, &ptr, sizeof(int*));
retrieve (&int_out_ptr, storage_int_ptr, sizeof(int*));
assert (int_in == *(int*)int_out_ptr);
char *char_in = "HelloWorld!!";
void *char_out;
store (storage_char_ptr, &char_in, sizeof(char*));
retrieve (&char_out, storage_char_ptr, sizeof(char*));
assert (strcmp (char_in, (char*)char_out) == 0);
char_in = _strdup("HelloWorld!!");
store (storage_char_ptr, &char_in, sizeof(char*));
retrieve (&char_out, storage_char_ptr, sizeof(char*));
assert (strcmp (char_in, (char*)char_out) == 0);
/* This is where it is failing */
int_in = 55;
void* int_out;
store (storage_int, &int_in, sizeof(int));
retrieve (&int_out, storage_int, sizeof(int));
assert (55 == *(int*)int_out);
}
¿cómo está fallando? – MByD