如何正确分配一组未签名的字符?
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;
}
最佳答案
你有:
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);
您必须自己跟踪
s1
和s2
对象的大小。我将这些变量称为s1_size
和s2_size
,但它们可以是常量。不要在指针上使用sizeof
,否则会得到指针的大小。 sizeof
函数告诉您在编译时已知的类型的大小。由于这是C ++,为什么不只使用
std::vector<unsigned char>
,然后+
和+=
也会很好地工作。否则,请考虑同时封装指针和size_t的struct
。