小弟目前在写socket programming(ap层),收底层UDP送过来的资料。
其中function:
int my_recv_UDP(int s,
void* mem,
int len,
struct sockaddr* from,
int fromlen);
用s来当接口,拿mem来收,收的长度为len,并回传实际接收的资料数(可能会比你在
len 参数中指定的还要少)
比如:
frameLen = my_recv_UDP(socket, rxBuf, 100, &ra, sizeof(ra))
拿socket来收,并把资料放到rxBuf里面,放100笔,回传实际接收的资料数(frameLen可能
少于100,代表这次的frame不到100笔,当然,也有可能下一次的frame超过100笔)
问题:
我想写一个struct,然后用此struct型别的指标指向rxBuf,这样我就可以透过这个指标的
资料结构看rxBuf里面的东西了
比如
typedef struct{
int cmd;
int data[?]; //you don't know the data length
int len;
}rxBuf_s;
rxBuf_s* rxBuf_p = rxBuf;
rxBuf_p->cmd (rxBuf的cmd), rxBuf->data(rxBuf的data), rxBuf_p->len (rxBuf的len)
但...rxBuf里面data的长度不是固定的啊...Orz,这样子我没办法写出一个struct...
所以我就想到,我是不是可以"先"把data length给算出来(算得出来),然"后"再把它放到
struct里,比如:
typedef struct{
int cmd;
int data[lengh]; //this is not allowed in C99 standard
int len;
}rxBuf_s;
然后编译出来的有问题...
上网查了一下发现,C99不允许结构里的阵列大小为变量...
这种情况下,我该怎么办呢?
PS: 上网查过,发现有在结构里把array长度给0的作法,如:
typedef struct{
int cmd;
int len;
int data[0]; //define the flexible array member
}rxBuf_s;
但这方法并不适用于我这个情况,因为我只是要创造一个ptr,并没有要创造一个变量。