Re: [問題] struct的data大小是可變的...

看板C_and_CPP (C/C++)作者 (念.力.寫.程.式)時間16年前 (2009/02/25 22:59), 編輯推噓4(404)
留言8則, 3人參與, 最新討論串2/4 (看更多)
※ 引述《pougoar ()》之銘言: : 假設我有個 : struct msg : { : int length; : char data[n]; : }; : 我想讓data的大小是可變的 : 然後透過網路送出去 : 這樣不知道要怎麼做比較好阿? : 我只知道可以用 dynamic allocate : struct msg : { : int length; : char *data; : }; : msg->data= (char*)allocate(sizeof(char)*n); : 1. 我很好奇 這樣動態的宣告data的大小會不會有問題阿? : 2. 還有一個問題是此時的data放的是動態allocate到資料的位址 : 這樣我把msg傳出去 : 遠端的電腦收到這個data的指標也沒用阿 : 它也指不到這個動態的區域 : 所以我想請問到底怎麼宣告這個大小不一定的structure : 且送出去的時候 遠端也可以順利的讀到這個structure : 謝謝指教... struct msg { int length; //4 bytes char data[]; }; #define MSG_HEADER_SIZE (sizeof(struct msg)) 這樣就是header長度為4 的作法 struct msg *msg_ptr = (struct msg*) malloc(length+MSG_HEADER_SIZE); msg_ptr->length = length; 指向資料端 msg->data ,填入資料 然後把msg_ptr指過去的空間全都丟進封包 char packet_buffer[]; <--假設這是 封包接收到的地方 struct msg *msg_packet = packet_buffer; 長度為 msg_packet->length; 資料則在 msg_packet->data; 封包的東西最好在擺個crc 以免傳送出錯, 如果底層做好就免了 封包還是有大小限制, 接收的buffer一般都設定成最大size -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.64.60.201 ※ 編輯: realmeat 來自: 210.64.60.201 (02/25 23:13)

02/25 23:28, , 1F
謝謝 我大概知道了
02/25 23:28, 1F

02/26 00:01, , 2F
抱歉請教一下 struct裡面包 char[] 我該怎麼給他直阿?
02/26 00:01, 2F

02/26 00:13, , 3F
就接在length的後面直接使用msg_ptr->data這位置
02/26 00:13, 3F

02/26 00:16, , 4F
那請問一下msg_packet = packet_buffer 這樣寫過的了嗎
02/26 00:16, 4F

02/26 00:47, , 5F
沒轉型還是可以硬接啦, 就跳個warning
02/26 00:47, 5F

02/26 00:48, , 6F
packet_buffer本身要有長度 我只是假設而已
02/26 00:48, 6F

02/26 00:53, , 7F
我用VC是不給我過 所以問問@@
02/26 00:53, 7F

02/26 00:55, , 8F
那要轉型, 不然調warnning等級, VC限制比gcc多 =3=y-~
02/26 00:55, 8F
文章代碼(AID): #19fLp4pc (C_and_CPP)
文章代碼(AID): #19fLp4pc (C_and_CPP)