问题是,当我们使用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不带括号,它不是一个函数。同样,我们在目标缓冲区上使用它,这似乎是更安全的选择。

09-25 18:31