尝试使用字符串变量而不是带引号的测试。 消息:退出状态 1 初始值设定项无法确定'data'的大小



我已经建造了两个Arduino Nano收发器,它们可以完美地通信。当我尝试使用字符串变量而不是引用文本时,我遇到了麻烦。

这编译并运行良好:

uint8_t data[] = "Hello World";
nrf24.send(data, sizeof(data));

这无法编译:

String myMessage = "Hello World";
uint8_t data[] = myMessage;
nrf24.send(data, sizeof(data));

我得到的错误消息:退出状态1初始值设定项无法确定"数据"的大小

我认为它失败了,因为我的字符串不是字符数组。我已经试过很多次转换这个以便被接受。我想不通。stackoverflow上的所有例子似乎都不起作用。

尝试这个

String myMessage = "Hello World";
nrf24.send(myMessage.c_str(), myMessage.length());

不能从String变量初始化数组,只能从字符串文字初始化。数组的大小必须在编译时已知,而String变量无法获得,因此必须在运行时动态分配数组,例如:

String myMessage = "Hello World";
size_t len = myMessage.length() + 1;
uint8_t *data = new uint8_t[len];
myMessage.getBytes(data, len);
nrf24.send(data, len);
delete[] data;

可以通过完全去掉阵列来简化:

String myMessage = "Hello World";
nrf24.send(reinterpret_cast<const uint8_t*>(myMessage.c_str()), myMessage.length()+1);

Arduino C++不是一个完整的C++实现。我对Arduino上的String类了解不多。类本身可能有一个用于进行此转换的函数,或者更有可能返回一个指向字符串中存储数据的缓冲区的指针。可能命名为ToArray或GetBuffer。

我怀疑您是否需要将数据复制到一个单独的数组中。相反,您希望传递字符串的第一个字节的地址和字符串的长度。而strlen()通常用于获取字符串的长度。我的猜测是String类提供了一个函数来为您返回它。可能是GetLength((或Length((。

最新更新