问题是,当我们使用memcpy()
复制任何Byte数组时,我们应该明确声明目标缓冲区的起始索引(第0个)还是简单提及即可。让我向我展示这些示例。前提是我们尝试将源缓冲区复制到目标缓冲区的开始。
BYTE *pucInputData; // we have some data here
BYTE ucOutputData[20] = {0};
代码1
memcpy((void*)&ucOutputData, (void*)pucInputData, 20);
代码2
memcpy((void*)&ucOutputData[0], (void*)pucInputData, 20);
最佳答案
不,您的两个示例都不理想。
请记住,C中的所有数据指针都可以在void *
(这是memcpy()
的第一个参数的类型)之间进行转换,而不会丢失任何信息,因此不需要强制转换。
还请记住,在许多情况下(例如,在这里),数组的名称将求值为第一个元素的地址。
还要记住,在可能的情况下使用sizeof
,在不需要时不要引入文字常量。
因此,副本应为:
memcpy(ucOutputData, pucInputData, sizeof ucOutputData);
请注意,我们使用的
sizeof
不带括号,它不是一个函数。同样,我们在目标缓冲区上使用它,这似乎是更安全的选择。