我在一个文件中有一些二进制数据,并将该文件加载到内存中的char* data
。现在我知道例如在偏移量 123 处开始一个 struct something
。
这样做安全吗
(struct something*) (data + 123) // ??&data [123]??
然后访问结构的成员。或者我应该做类似的事情
struct something record;
memcpy (&record, data + 123, sizeof (struct something) );
或者甚至完全不同的东西?
我的问题主要是有动机的,因为我对“内存对齐”、“字边界”等有一些模糊的内存……
最佳答案
是的,您应该使用 memcpy
,而不是指针转换,这正是您讨论的原因:对齐。转换指针是不安全的。如果对齐错误,则 C 标准不保证使用结果指针时的行为。
在某些情况下,另一种方法是将数据直接读入对象。
关于c - C结构的对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21395270/