Este problema se llama "serializing" y puede ir desde triviales a realmente complicado. Si su estructura de datos es independiente, por ejemplo, un montón de píxeles en una matriz y conoce las dimensiones de la matriz, puede simplemente volcar los datos y luego volver a leerlos.
Si tiene, por ejemplo, listas vinculadas, o punteros de cualquier tipo, en sus datos, esos punteros no señalarán nada válido una vez que los haya leído. Aquí es donde un enfoque más formal a la serialización comienza a tener sentido.
Esto puede abarcar desde guardar como formatos de archivo, usar bases de datos, convertir a XML u otro formato jerárquico, y así sucesivamente. Lo que es una solución correcta depende completamente del tipo de datos que tenga y de qué tipo de operaciones esté haciendo, además de cómo a menudo planea escribir y luego volver a leer desde el disco. (.. O red, o lo que está haciendo)
Si lo que tienes es una mancha trivial de datos, y lo que desea es escribir de la manera más sencilla posible, utilice fwrite():
fwrite(my_pointer, MEMORY_SIZE, 1, fp);
y luego fread() para leer los datos. También vea un relacionado (más o menos relacionado dependiendo de cuán avanzadas sean sus necesidades) serializing question on StackOverflow.
Propia serialization también resuelve the problems that appear cuando se supone que diferentes tipos de CPU pueden leer datos entre sí. La serialización adecuada en C es mucho más complicada que en otros lenguajes. En Lisp, por ejemplo, todos los datos y el código ya están serializados. En Java, existen métodos para ayudarlo a serializar sus datos.Las propiedades de C que lo convierten en un lenguaje adecuado para el alto rendimiento y la programación de sistemas también lo hace más difícil de usar para otras cosas.
¿Contiene punteros? – ruslik
Sí, contiene punteros. Pero creo que puedo reprogramar algunas partes para evitarlo. Gracias por todas las respuestas, ¡ayudó mucho! – kristus