警告:传递“memcpy”的参数 1 使指针来自整数而不进行强制转换
warning: passing argument 1 of ‘memcpy’ makes pointer from integer without a cast
我正在编写将在嵌入式 linux 上 运行 的 c 代码。我必须将数组的内容复制到一块内存中。我定义内存的基地址为:
#define BASE_ADDRESS 0x40000000
现在,当我将数组的内容 memcpy 到基地址时,我收到了从整数创建指针而不进行强制转换的警告。如何删除此警告?这是我的代码:
unsigned int rx1_arr[64] = {0}; //some data is added to this array before memcpy
memcpy(BASE_ADDRESS, &rx1_arr, 64*sizeof(int));
您需要转换为 void 指针
memcpy((void *)BASE_ADDRESS, rx1_arr, 64*sizeof(int));
rx1_arr前面不需要地址运算符&
。
rx1_arr
、&rx1_arr
、&rx1_arr[0]
指向同一个地址但类型不同
正如您在 Documentation 中看到的那样,memcpy
期望第一个参数是 void *
但您给出的 BASE_ADDRESS
是 int
.给出的错误是:
note: expected 'void * restrict' but argument is of type 'int'
只需将其转换为 void *
memcpy((void *)BASE_ADDRESS, &rx1_arr, 64*sizeof(int));
Ps :不要在 memcpy
中使用 &rx1_arr
,而是使用 rx1_arr
我正在编写将在嵌入式 linux 上 运行 的 c 代码。我必须将数组的内容复制到一块内存中。我定义内存的基地址为:
#define BASE_ADDRESS 0x40000000
现在,当我将数组的内容 memcpy 到基地址时,我收到了从整数创建指针而不进行强制转换的警告。如何删除此警告?这是我的代码:
unsigned int rx1_arr[64] = {0}; //some data is added to this array before memcpy
memcpy(BASE_ADDRESS, &rx1_arr, 64*sizeof(int));
您需要转换为 void 指针
memcpy((void *)BASE_ADDRESS, rx1_arr, 64*sizeof(int));
rx1_arr前面不需要地址运算符&
。
rx1_arr
、&rx1_arr
、&rx1_arr[0]
指向同一个地址但类型不同
正如您在 Documentation 中看到的那样,memcpy
期望第一个参数是 void *
但您给出的 BASE_ADDRESS
是 int
.给出的错误是:
note: expected 'void * restrict' but argument is of type 'int'
只需将其转换为 void *
memcpy((void *)BASE_ADDRESS, &rx1_arr, 64*sizeof(int));
Ps :不要在 memcpy
中使用 &rx1_arr
,而是使用 rx1_arr