memcpy - 获取临时数组错误的地址
memcpy - taking the address of temporary array error
我正在研究 Arduino 并尝试更改数组的元素。在设置之前,我像这样初始化数组:
bool updateArea[5] = { false };
然后我想像这样更改数组:
updateArea[0] => false,
updateArea[1] => true,
updateArea[2] => false,
updateArea[3] => false,
updateArea[4] => true
通过使用:
memcpy(&updateArea[0], (bool []) {false, true, false, false, true}, 5);
但是,我收到“获取临时数组的地址”错误。
我也尝试在设置和循环函数中初始化数组,但得到了同样的错误。
这种语法在 C 中有效,但在 C++ 中无效——这是 Arduino 的底层语言 IDE。
但是您有一些简单的解决方案:
既然你无论如何都愿意写出数组,为什么不干脆:
bool updateArea[5] = {false, true, false, false, true};
可以声明数组为非临时数组,然后传给memcpy
:
static const bool newArray[5] = {false, true, false, false, true};
memcpy(updateArea, newArray, sizeof(updateArea));
如果你可以假设 sizeof(bool) == 1
,那么你可以使用这个 hacky 解决方案:
memcpy(updateArea, "\x00\x01\x00\x00\x01", sizeof(updateArea));
这将直接复制字节。
我正在研究 Arduino 并尝试更改数组的元素。在设置之前,我像这样初始化数组:
bool updateArea[5] = { false };
然后我想像这样更改数组:
updateArea[0] => false,
updateArea[1] => true,
updateArea[2] => false,
updateArea[3] => false,
updateArea[4] => true
通过使用:
memcpy(&updateArea[0], (bool []) {false, true, false, false, true}, 5);
但是,我收到“获取临时数组的地址”错误。
我也尝试在设置和循环函数中初始化数组,但得到了同样的错误。
这种语法在 C 中有效,但在 C++ 中无效——这是 Arduino 的底层语言 IDE。
但是您有一些简单的解决方案:
既然你无论如何都愿意写出数组,为什么不干脆:
bool updateArea[5] = {false, true, false, false, true};
可以声明数组为非临时数组,然后传给
memcpy
:static const bool newArray[5] = {false, true, false, false, true}; memcpy(updateArea, newArray, sizeof(updateArea));
如果你可以假设
sizeof(bool) == 1
,那么你可以使用这个 hacky 解决方案:memcpy(updateArea, "\x00\x01\x00\x00\x01", sizeof(updateArea));
这将直接复制字节。