看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) windows 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) VS 問題(Question): 我寫的程式,要讀取另一個程式記憶體內的資料 那個資料是完整的struct結構,但是其內容非常大 而我只知道struct的大小,但整個結構不知道 但是我只要其中幾個數據 我自己建立一個struct去讀他 typedef struct _iteminfo { int index; int type; char* name; . . . int count; . . _iteminfo* next; }*ITEMINFO 中間的....有的資料但是我用不到,我要怎麼把中間的資料弄滿去完成這整個struct 還是只能弄個同樣大小的東西去塞他? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.117.78.26 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1480083390.A.33C.html ※ 編輯: stupid0319 (122.117.78.26), 11/25/2016 22:16:59
james732: 好像只能塞用不到的member?能指定member offset有多好 11/25 22:24
james732: 對了,提醒要注意alignment問題,可能會需要packed 11/25 22:25
stupid0319: 對呀,沒辦法指定元素的偏移位置嗎........ 11/25 22:31
dijkstra: 塞char array吧 11/26 00:32
dijkstra: 我是覺得也不用去建struct,直接用byte offset去取值 11/26 00:34
stupid0319: 沒有建struct會讓程式變的很零亂,也比較會出現bug 11/26 00:54
ilikekotomi: 塞char array還不錯 11/26 01:23
EdisonX: 標準 C 有個好用的 macro , 叫 offsetof, 用這個可以重新 11/26 02:41
EdisonX: 抽出所有你要的成員。是我的話會用 11/26 02:41
EdisonX: int convert( ITEMINFO * pInfo , mystruct * pMyInfo); 11/26 02:42
EdisonX: 裡面就用 offsetof 去做,這樣以後 ITEMINFO 加成員也不用 11/26 02:43
EdisonX: 改變上述的 "塞array" 的大小。 11/26 02:43
stupid0319: 樓上的意思像是是不是struct打掉重組成另一個的感覺 11/26 07:13
stupid0319: 但是要直接修改目標程式的記憶體內容會變的很不方便 11/26 07:17
stupid0319: 不過又多學到了兩個巨集了,感謝 11/26 07:18
steve1012: 跟打掉沒關係 11/26 08:14
chuegou: 拿資料出來重排的感覺 11/26 13:24