我正在读取从udp流捕获的jpg片段,我有以下内容:
#define BUF_SIZ 1066
int main(int argc, char *argv[])
{
int ptr;
uint8_t buf[BUF_SIZ];
uint8_t jpg[BUF_SIZ * 256];
repeat:
//... Check if first packet
//... fill buf after finding first packet
// append buf array to jpg array passing header
memcpy(&jpg[ptr], &buf[46], numbytes - 46);
ptr += (numbytes - 46);
... check if last packet.
... goto repeat if not last packet
ending:
... process jpg array
这是可行的,但我认为这是不对的(我是c新手),我偶尔会遇到随机的分段错误。
我在包和包之间做其他事情,所以我需要尽快完成包的捕获
最佳答案
在做memcpy之前要检查的事情:
ptr >= 0
ptr+numbytes < BUF_SIZ * 256
numbytes >= 46
ptr+numbytes > 0
最后一个可能看起来很奇怪,但是可能有numbyets的值在那里失败了,但是满足了其他三个检查(但如果你能证明numbytes远低于INT_MAX,你就不需要tat检查)