C结构的对齐

Hyp*_*eus 2 c pointers memory-alignment word-boundaries

我在文件中有一些二进制数据,并将文件加载到内存中char* data.现在我知道,例如在偏移123处开始a struct something.

执行以下操作是否安全

(struct something*) (data + 123) // ??&data [123]??
Run Code Online (Sandbox Code Playgroud)

然后访问结构的成员.或者我应该做些什么

struct something record;
memcpy (&record, data + 123, sizeof (struct something) );
Run Code Online (Sandbox Code Playgroud)

甚至是完全不同的东西?

我的问题主要是因为我对"记忆对齐","词边界"等有一些模糊的回忆......

Eri*_*hil 6

是的,您应该使用memcpy而不是指针转换,因为您正在讨论的原因是:对齐.转换指针并不安全.如果对齐错误,C标准不保证使用结果指针时的行为.

在某些情况下,另一种方法是将数据直接读入对象.