Arduino(C )condenate char*阵列与float数组
Arduino (C++) concatenate Char* array with float array
好吧,所以我有一组传感器连接到ESP8266 WiFi SOC,该传感器将填充带有浮子的数组。然后,在通过MQTT客户端发布之前,我需要将其与一系列MQTT主题相连。我创建了一个裸露的骨头草图,如下所示,以尝试解决数组/char操作的问题:
#include <ESP8266WiFi.h>
float readingsArray[10]; //Store the sensor readings
float reading; // Current reading
char* mqttPackage; // The concatenated output.
char* sensorIDArray[] = { // Used for the MQTT topic string
"DS18B20_1",
"DS18B20_2",
"DS18B20_3",
"DHT22_t",
"DHT22_h",
"Hygrometer_1",
"Hygrometer_2",
"Hygrometer_3",
"Hygrometer_4",
"Battery"
};
void setup(){
Serial.begin(9600);
for (int i = 0; i < 10; i++){ // Populate the readingsArray with dummy data.
reading = random(0, 100);
Serial.print("Reading: ");
Serial.println(reading);
readingsArray[i] = reading;
delay(100);
}
Serial.print("readingsArray full");
for (int i = 0; i < 10; i++){
strcpy(mqttPackage, sensorIDArray[i]); // copy topic to mqttPackage
String tempStr = String(readingsArray[i]); // string from sensor float
char* newChar; // I THINK THIS IS THE OFFENDING VARIABLE
tempStr.toCharArray(newChar, tempStr.length() + 1); // string to char array
strcat(mqttPackage, newChar); // concatenate the chars to mqttPackage
Serial.print("Element "); // Debug print the output.
Serial.print(i);
Serial.print(": ");
Serial.println(mqttPackage);
delay(100);
}
}
我正在从ESP8266中获得错误29,这表明缓冲区充满了无限变量。请有人可以给我一些关于我出错的事情的指示。
请不要烤我。我是一个业余编码器,只是想学习,我从字面上花了一个星期的晚上将其作为自助搜索,但遇到了一个障碍。
String::toCharArray
将String
对象管理的字符复制到提供的缓冲区中。您将newChar
作为输出缓冲区传递,但并未指向您可以写入的任何内存。您需要分配一个可以将字符串写入的缓冲区:
char newChar[100] = {};
tempStr.toCharArray(newChar, 99); // 99 so we can't overwrite the last nul character
请注意,如果tempStr
长于99 char
s,则第一个99将写入newChar
。
您的strcpy
和strcat
呼叫共享相同的问题。他们希望填充用户提供的缓冲区,但是您通过的指针并没有指向任何东西。
实际上没有任何舞蹈。String
直接支持串联,因此您可以做
String mqttPackage = sensorIDArray[i];
mqttPackage += readingsArray[i];
当然,您实际上根本不需要将内存中的值限制,因为您只是将它们打印到串行端口。您可以直接打印它们,让Serial
库担心将其转换
Serial.print("Element ");
Serial.print(i);
Serial.print(": ");
Serial.print(sensorIDArray[i]);
Serial.println(readingsArray[i];
相关文章:
- OpenMP阵列性能较差
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 当我的阵列太大时出现分段错误
- 位阵列上的快速AND运算
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- 阵列必须使用大括号封闭的初始器进行初始化
- 没有从阵列<float>到阵列<int>的可行转换
- C++动态安全 2D 交错阵列
- 数组下标的类型"float*[float]"无效
- 将平面阵列重塑为复杂的特征类型
- 如何使用英特尔 PIN 捕获阵列的所有负载?
- 为什么我能够为阵列分配比计算机实际拥有的内存更多的内存
- 库特<<恩德尔;不适用于打印 2D 阵列
- 数组类 阵列的打印输出
- 从较小的阵列到较大的阵列的元素级转换
- 仅在大型阵列上出现合并排序分段错误
- 没有合适的构造函数可以从"float"转换为"_D3DCOLORVALUE"
- 为什么我会收到此错误?无法将 {lb, ub} 从<大括号括起来的初始值设定项列表>转换为 float(**)(float*, int)
- Arduino(C )condenate char*阵列与float数组
- MBED RTOS将Float转换为字符串/字符阵列