将int8_t数组附加到更大的int8_t数组中

时间:2018-03-24 00:34:53

标签: c packet-capture

我正在阅读从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的新手),而且我偶尔会出现随机段错误。

我在数据包之间做其他事情所以我需要尽快完成捕获包

1 个答案:

答案 0 :(得分:1)

在做memcpy之前要检查的事情:

ptr >= 0
ptr+numbytes < BUF_SIZ * 256
numbytes >= 46
ptr+numbytes > 0

最后一个可能看起来很奇怪,但可能有数字的值在那里失败,但满足其他三个检查。 (但如果你能证明数字远低于INT_MAX你就不需要进行检查)