gpt4 book ai didi

c++ - 连接两个 unsigned chars + mallock u_chars

转载 作者:行者123 更新时间:2023-11-28 06:58:37 25 4
gpt4 key购买 nike

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

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

我有两个声明如下的函数

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

我如何连接这 2 个无符号字符?我尝试了 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_sizes2_size , 但它们可以是常量。不要使用 sizeof在指针上,或者你得到指针的大小。 sizeof函数告诉您类型的大小,在编译时已知。

因为这是 C++,为什么不直接使用 std::vector<unsigned char>然后 ++=会很好地工作。否则,考虑 struct封装了指针和 size_t。

关于c++ - 连接两个 unsigned chars + mallock u_chars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22850778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com