Arduino函数无法编辑数组
Arduino function can't edit array
Background
我编写了一个 Arduino 函数,它通过串行连接接收"a,b,c,d,e"
格式的字符串,其中 a、b、c、d、e 是整数,每次收到新字符串时,我都会尝试使用这些整数更新数组。数据被接收并解析为单个整数,但数组不会正确更新。
尝试
下面是代码,我省略了getData()
函数,因为它所做的只是从串行连接接收字符串并将其存储在字符数组中input
(该部分工作正常(。
void setup() {
Serial.begin(9600);
}
void loop() {
getData();
if(parsed == false){
parseData(readings);
}
}
void parseData(int readings[]) {
x = 0;
char * split;
split = strtok(input,",");
while (split != NULL)
{
readings[x] = split;
split = strtok (NULL, ",");
x++;
}
parsed = true;
}
问题
如果我发送像"6,7,8,9,0"
这样的字符串,数组readings[]
都会更新为[289,291,293,295,297]
无论我发送什么值,我已经检查了函数内部split
取的值并且它们是正确的,但是行readings[x] = split;
无法将数组元素更新为该顺序中那 5 个数字以外的任何内容。当在parseData
函数内部或外部检查readings[n]
的值时,就是这种情况。
另外,如果我在字符串中发送少于 5 个整数,例如a,b,c
,只有第一个数组元素会改变,其他数组元素将保持在 0,例如[289,291,293,0,0]
在我发现将数组指针传递给函数之前,完全相同的事情发生在略有不同的代码中 - 当我在循环中调用函数时,我只使用parseData();
,当我定义函数时,我只是使用了void parseData(){
问题
为什么阵列没有正确更新,我该如何修复它?
您的readings
是一个整数数组。split
是一个指向字符的指针。
声明
readings[x] = split
将拆分(字符的地址(存储为整数值。
如果我写
const char *pointer = "42";
int address = pointer;
我不是在address
中存储42
的整数值 - 我正在存储标识字符串中第一个字符的内存位置的数字。
如果要将字符串转换为整数,则需要使用类似strtol
的函数对其进行解析。
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- Arduino函数无法编辑数组
- 已编辑 我如何将其拆分为 char 和 int 数组
- 如何在C++的所有函数中编辑原始数组
- 随机字符串生成器不编辑我的字符串数组 (C++)
- 编辑数组以确保严格增加值
- 如何编辑结构数组中的变量
- 编辑2d数组中的元素范围
- 编辑:根据偶数和奇数元素将数组拆分为两个
- 如何编辑流式处理字符数组中的元素
- 编辑:如何将数组值传输到正数组和负数组
- 编辑存储在字节数组中的数据
- 在控制台编辑数组输出
- 需要帮助创建数组并在另一个函数中编辑它,并将其发送回初始函数
- 将结构体传递给函数以编辑数组导致的c++ seg错误
- 返回私有数组的第一个指针(编辑)
- 在2d数组中编辑值
- 我应该如何构造数组与地址页(文本编辑器类)
- 更有效的方式查找编辑距离在一个大的数组