加入两个unsigned chars + mallock u_chars

时间:2014-04-03 23:20:14

标签: c++ unsigned-char

如何正确分配无符号字符数组?

packet = (u_char*) malloc (20*sizeof(u_char)); //is it simmilar to u_char packet[20]?

我有2个声明如下的函数

u_char *frame(bool type, char* srcmac, char* dstmac);
u_char *ip(bool type, char* srcip, char* dstip);

如何连接这两个无符号字符?我试过memcpy,strcat [仅用于char]。

u_char *concat(u_char *s1, u_char *s2) {

    u_char *result = (u_char*) malloc((sizeof(s1)+sizeof(s2)+1));//+1 for the zero-terminator

    memcpy(result, s1, sizeof(s1));
    memcpy(result, s2, sizeof(s2)); //I am overwriting result already and sizeof is size of pointer...
    return result;
}

1 个答案:

答案 0 :(得分:1)

你有:

u_char *concat(u_char *s1, u_char *s2) {
u_char *result = (u_char*) malloc((sizeof(s1)+sizeof(s2)+1));

这没有任何意义。为什么你关心指针有多大?这个函数如何在不知道它们有多大的情况下连接两个东西?也:

memcpy(result, s1, sizeof(s1));
memcpy(result, s2, sizeof(s2));

应该是:

memcpy(result, s1, s1_size);
memcpy(result + s1_size, s2, s2_size);

您必须自己跟踪s1s2个对象的尺寸。我调用了这些变量s1_sizes2_size,但它们可以是常量。不要在指针上使用sizeof或者获得指针的大小。 sizeof函数告诉您类型的大小,在编译时已知。

由于这是C ++,为什么不使用std::vector<unsigned char>,然后++=将很好地工作。否则,请考虑一个封装指针和size_t的struct