为什么会这样?
u_char macDst[6], macSrc[6], ipType[2]={0x88, 0x92};
u_char header[] = {0x04,0x00,0x20,0x00,...,};
const int len = sizeof(macDst) + sizeof(macSrc) + sizeof(header) + 2;
u_char* pck[len];
int j = 0, length = sizeof(macDst);
for (j; j < length; j++)
{
pck[j] = &macDst[j];
}
length += sizeof(macSrc);
for (j; j < length; j++)
{
pck[j] = &macSrc[j - sizeof(macDst)];
}
pck[j++] = &ipType[0];
pck[j++] = &ipType[1];
length += sizeof(header) + 2;
for (j; j < len; j++)
{
pck[j] = &header[j - sizeof(macDst) - sizeof(macSrc)];
}
u_char testSend[170];
memcpy(testSend, *pck, sizeof(pck));
var testSend只有macDst值(在初始化之前),而在指针中我有所有这些值。如果我一个一个地复制它们,我会得到一个好结果:
for (int k = 0; k < 170; k++)
{
testSend[k] = *pck[k];
}
任何想法??
谢谢!
编辑:
这是一个物理问题:
-----ooooooooo------------aaaa----bbbb----
- Null Data
当我创建指针数组时,我这样做:
oooooooooaaaabbbb
但是当我发送数据包时,当我执行memcpy(或memmove)时,我说的是:拿这个指针和这么多内存并复制它们:
----|oooooooooo----------|----aaaaa----bbbb----
是3个记忆位置之和的数量。
答案 0 :(得分:0)
我觉得代码很复杂,我绝不会这样写。不过,这里的错误是:
memcpy(testSend, *pck, sizeof(pck));
您正在取消引用pck
- 并指向第一个元素,即char*
。这是您使用memcpy复制的内容。另一方面,手写循环在复制之前会取消引用指针。
答案 1 :(得分:0)
直接填写testSend
数组:
u_char *p = testSend;
memcpy(p, macDst, sizeof(macDst)); p += sizeof(macDst);
memcpy(p, macSrc, sizeof(macSrc)); p += sizeof(macSrc);
memcpy(p, ipType, sizeof(ipType); p += sizeof(ipType);
memcpy(p, header, sizeof(header));