C_and_CPP 板


LINE

小弟目前在写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,并没有要创造一个变数。 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.163.216.18
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1545460670.A.A20.html ※ 编辑: zzss2003 (118.163.216.18), 12/22/2018 14:55:18
1F:推 stupid0319: Google Protocol buffers 12/22 15:36
2F:推 jasonwu23: vector好吗 或者你每次进来malloc 处理好free 12/22 16:16
3F:推 easyman: 收到一个 buffer , 判断资料收满了, 再切 12/22 23:21
4F:→ poyenc: 问题可以简化成产生动态阵列, 再来根据使用情况设计介面 12/24 02:08
5F:→ poyenc: https://wandbox.org/permlink/WrwUrza4jwgcfPoD 12/24 02:08
6F:推 askacis: 一般struct里面都是放指标,再allocate记忆体给他 12/24 13:20
7F:→ Killercat: 这种写法是C吧 用C2Lib参考一下 12/24 20:36
8F:→ Killercat: 要简单就C2Lib 要麻烦就是自己每收一次就malloc一次 12/24 20:37
9F:推 dou0228: 都用 UDP 了,要不要看一下 UDP 封包设计? 12/25 10:35
10F:→ dou0228: UDP header 有 2 bytes 表示资料长度(content length) 12/25 10:36
11F:推 IhateOGC: 都有接收资料长度了,当然宣告ptr 01/08 15:24







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP