Re: [問題] 柔性陣列用途
看板C_and_CPP (C/C++)作者purpose (purpose)時間15年前 (2011/04/20 22:21)推噓6(6推 0噓 10→)留言16則, 6人參與討論串3/3 (看更多)
※ 引述《tropical72 (藍影)》之銘言:
: 近來翻了本書介紹 C 一些技巧/注意事項,
: 其中提到了柔性陣列
: typedef struct tagFArray{
: int num;
: int arr[0];
: }FArray;
: #define N 100
: FArray f = (tagFarray*)malloc(sizeof(FArray) + N*sizeof(int));
: for(int i=0; i!=N; ++i) f->arr[i] = i;
: 這種方式似乎與 struct 用 int* arr = (int*)malloc(sizeof(int)); 沒兩樣,
: 但一直感覺不出它的方便性 (也可能是我都沒用過)
: 不知有經驗 / 其它想法的版友能否提示, 在哪種地方看過?
: 謝謝各位指教
重點在於,供給者跟消費者是不同的兩幫人馬。
你這裡 f 是自己建的,然後用的人又是你,才會沒效果。
typedef struct _IMAGE_IMPORT_BY_NAME {
WORD Hint;
BYTE Name[1];
} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME;
這個結構是用來存函數資訊。
比如
第一個函數 Hint = 11; Name = "CreateDialog"; 總共需要 2+12 = 14 Bytes
第二個函數 Hint = 22; Name = "sleep"; 總共需要 2+6 = 8 Bytes
這些資料,由供給方資料記載到檔案。
檔案還面會有一個表格,分別記下第一個函數在檔案內的位置 (offset of 函數1)、
第二個函數在檔案內的位置 (offset of 函數2)。
消費方使用時,就將整個檔案載入到記憶體
而因為前面的那個表格,所以可以得到兩組記憶體位址 p1、p2
p1 與 p2 的資料型態是:
PIMAGE_IMPORT_BY_NAME p1, p2;
則這樣寫
puts(p1->Name);
puts(p2->Name);
就能抓出每一個函數的名稱,因為 C-Style 字串找到 '\0' 就停止。
如果想要抓 Hint 值,也能用 p1->Hint; p2->Hint;
只要供給方把檔案準備好,並且把 IMAGE_IMPORT_BY_NAME 這個結構
的原型宣告公佈出去即可。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.8.136.205
→
04/20 22:31, , 1F
04/20 22:31, 1F
→
04/20 22:31, , 2F
04/20 22:31, 2F
→
04/20 22:31, , 3F
04/20 22:31, 3F
推
04/20 23:04, , 4F
04/20 23:04, 4F
推
04/20 23:36, , 5F
04/20 23:36, 5F
推
04/20 23:40, , 6F
04/20 23:40, 6F
→
04/20 23:41, , 7F
04/20 23:41, 7F
→
04/20 23:42, , 8F
04/20 23:42, 8F
→
04/20 23:42, , 9F
04/20 23:42, 9F
推
04/20 23:43, , 10F
04/20 23:43, 10F
→
04/20 23:43, , 11F
04/20 23:43, 11F
→
04/20 23:44, , 12F
04/20 23:44, 12F
→
04/20 23:46, , 13F
04/20 23:46, 13F
推
04/21 00:33, , 14F
04/21 00:33, 14F
推
04/21 10:03, , 15F
04/21 10:03, 15F
→
04/21 10:17, , 16F
04/21 10:17, 16F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章