C_and_CPP 板


LINE

我想可能大概是这种感觉吧? 就你叙述的想法而言 Update: 我刚刚发现有地方写错了 typedef struct{ int cmd; int len; int data[0]; //define the flexible array member }rxBuf_s; int my_recv_UDP(int s, rxBuf_s **mem, int maxlen, struct sockaddr* from, int fromlen) { char *buffer = malloc(maxlen * sizeof(int)); int length = 0; // length is actually length from socket length = Some_UDP_recv_function(s, buffer, maxlen * sizeof(int)); *mem = (rxBuf_s*)malloc(sizeof(int) * (2 + length)); (*mem)->cmd = some_parse_function(); (*mem)->len = length; memcpy((*mem)->data, buffer, length * sizeof(int)); free(buffer); return length; } int main(){ ... rxBuf_s *rxBuf; int len = my_recv_UDP(socket, &rxBuf, 100, &ra, sizeof(ra)); // do something to rxBuf if(rxBuf->data[0] == SOME_NUMBER) { ... } free(rxBuf); ... } ※ 引述《zzss2003 (brotherD)》之铭言: : 小弟目前在写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,并没有要创造一个变数。 -- 杰米,炸掉它吧。 ⊙─ ─⊙▂⊙ 碰到问题,用C4就对了! █◤ Adam Savage Jamie Hyneman MYTHBUSTERS by dajidali --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.246.145.133
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1545504002.A.A9B.html ※ 编辑: tjjh89017 (111.246.145.133), 12/23/2018 02:53:40
1F:推 jobsdone: fix cmd的size,data直接指到buffer加cmd的offset的位 12/23 11:18
2F:→ jobsdone: 置感觉比较好些 12/23 11:18







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灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP