看板 C_and_CPP 關於我們 聯絡資訊
如果這是蠢問題就請噓爆我@@ 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 問題(Question): 有一個巢狀結構如下述,請問那個records的陣列大小是可以調整的嗎@@? 程式碼(Code):(請善用置底文網頁, 記得排版) typedef struct{ time_t t; double d; }Value; typedef struct{ int NumberOfRecords; struct _Record{ char Name[64]; Value value; }records[1]; }Message; -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.42.207.127 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1416930324.A.E67.html
wuliou: records的的宣告在哪? 11/25 23:59
azureblaze: 為何不直接試試看? 11/26 00:04
PoorLoser: 可以啊, 填多少就有多少個 _Record 11/26 00:05
PoorLoser: 不過小魯習慣把 _Record 型態定義在外面 11/26 00:06
所以我可以 Message msg; msg.records = (struct _Record)* malloc (5 * sizeof(struct _Record)); ... free(msg.records); 類似這樣? 怎麼感覺都怪怪的@@
wuliou: 啊 眼殘了 歹勢 11/26 00:10
PoorLoser: 不可以, 左邊要是 pointer 11/26 00:30
PoorLoser: 然後你宣告完產生的物件裡面就佔了那麼大的空間 11/26 00:31
PoorLoser: 用 malloc 做甚麼? 11/26 00:32
我的表達能力很差, 因為這個結構拿來用 Message msg; 那我只能 msg.records[0].d = 1.0; time(&msg.records[0].t); 之類的存一筆資料 我在納悶如我我要存NumberOfRecords筆的資料會怎麼做
PoorLoser: 不太懂欸, 對成員賦值的確是這樣填, 不然也可以建立 11/26 01:50
PoorLoser: 一個 _Record 把值都填好然後用 memcpy 整個塞進去 11/26 01:51
PoorLoser: 若是初始化就要填固定資料的話可加上 packed 11/26 01:52
就是現在Message這個結構裡面只會有一筆record, 納悶有什麼辦法在不動records[1]這邊, //像假如改成records[5]就可以存5筆 但是可以達到類似宣告records[5]的效果 //或是改成 *records 就可以 malloc? ※ 編輯: lionheart60 (114.42.207.127), 11/26/2014 02:09:15
PoorLoser: 方法就你提的, 改 records 陣列大小用指標 11/26 02:12
PoorLoser: 但要用指標不如就改寫成 linked list 11/26 02:12