Re: [問題] struct的data大小是可變的...
看板C_and_CPP (C/C++)作者realmeat (念.力.寫.程.式)時間16年前 (2009/02/25 22:59)推噓4(4推 0噓 4→)留言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
02/26 00:01, 2F
→
02/26 00:13, , 3F
02/26 00:13, 3F
推
02/26 00:16, , 4F
02/26 00:16, 4F
→
02/26 00:47, , 5F
02/26 00:47, 5F
→
02/26 00:48, , 6F
02/26 00:48, 6F
推
02/26 00:53, , 7F
02/26 00:53, 7F
→
02/26 00:55, , 8F
02/26 00:55, 8F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 4 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章