警告:传递“ memcpy”的参数1会使指针从整数开始而无需强制转换

时间:2018-08-03 09:37:35

标签: c embedded-linux memcpy

我正在研究要在嵌入式Linux上运行的C代码。我必须将数组的内容复制到一块内存中。我将内存的基地址定义为:

#define BASE_ADDRESS 0x40000000

现在,当我将数组的内容存储到基址上时,会收到警告,警告要从整数进行指针转换而不进行强制转换。如何删除此警告?这是我的代码:

unsigned int rx1_arr[64] = {0}; //some data is added to this array before memcpy
memcpy(BASE_ADDRESS, &rx1_arr, 64*sizeof(int));

2 个答案:

答案 0 :(得分:2)

您需要投射到虚弱点

 memcpy((void *)BASE_ADDRESS, rx1_arr, 64*sizeof(int));

rx1_arr前面不需要地址运算符&

rx1_arr&rx1_arr&rx1_arr[0]指向相同的地址,但类型不同。

答案 1 :(得分:2)

正如您在Documentation中看到的那样,memcpy期望第一个参数是void *,但是您给出的BASE_ADDRESSint。给出的错误是:

  

注意:预期为“ void *限制”,但参数的类型为“ int”

只需将其转换为void *

memcpy((void *)BASE_ADDRESS, &rx1_arr, 64*sizeof(int));

Ps:不要在您的&rx1_arr中使用memcpy,而要使用rx1_arr