我在文件中有一些二進制數據並將文件加載到內存中char* data
。現在我知道例如在偏移123處開始struct something
。C結構的對齊
是否安全,做結構的以下
(struct something*) (data + 123) // ??&data [123]??
,然後訪問的成員。或者我應該像
struct something record;
memcpy (&record, data + 123, sizeof (struct something));
甚至完全不同的東西?
我的問題是主要動機,是因爲我對「內存對齊」,「單詞邊界」等一些模糊的回憶......
非常感謝。我擔心如此,我會堅持'memcpy'。請注意:'data + 123','&data [123]'和'&123 [data]'之間是否有區別?或者只是語法糖? – Hyperboreus
@Hyperboreus:爲了您的目的,這些表達式之間沒有區別。 (我很想說沒有,除了你可能需要括號來避免優先級問題;例如'指針 - 數據+ 123'與'指針 - &數據[123]'不同,而指針 - (數據+ 123) '和後者一樣,但爲了確保即使在深奧的情況下也沒有差異,我必須檢查C標準,並且此刻我被迫按時。) –
一面注意: -in'memcpy'經常在與未對齊的數據一起使用時導致轉儲,因此如果遇到該問題(依賴於編譯器),您可能需要禁用內置的'memcpy'和'memmove'(並使用libc版本)。 –