memcpy -获取临时数组错误的地址



我正在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);

然而,我得到了临时数组的取地址。错误。

我也尝试在setup和loop函数中初始化数组,但得到相同的错误。

这种语法在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,那么你可以使用这个hack的解决方案:

    memcpy(updateArea, "x00x01x00x00x01", sizeof(updateArea));
    

    将直接复制字节。

相关内容

  • 没有找到相关文章

最新更新