我正在研究要在嵌入式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));
答案 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_ADDRESS
是int
。给出的错误是:
注意:预期为“ void *限制”,但参数的类型为“ int”
只需将其转换为void *
memcpy((void *)BASE_ADDRESS, &rx1_arr, 64*sizeof(int));
Ps:不要在您的&rx1_arr
中使用memcpy
,而要使用rx1_arr