看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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)
pougoar:謝謝 我大概知道了 02/25 23:28
QQ29:抱歉請教一下 struct裡面包 char[] 我該怎麼給他直阿? 02/26 00:01
realmeat:就接在length的後面直接使用msg_ptr->data這位置 02/26 00:13
QQ29:那請問一下msg_packet = packet_buffer 這樣寫過的了嗎 02/26 00:16
realmeat:沒轉型還是可以硬接啦, 就跳個warning 02/26 00:47
realmeat:packet_buffer本身要有長度 我只是假設而已 02/26 00:48
QQ29:我用VC是不給我過 所以問問@@ 02/26 00:53
realmeat:那要轉型, 不然調warnning等級, VC限制比gcc多 =3=y-~ 02/26 00:55