C++ Arduino功能可以';t编辑数组
背景 我编写了一个Arduino函数,它通过串行连接接收格式为C++ Arduino功能可以';t编辑数组,c++,arrays,arduino,C++,Arrays,Arduino,背景 我编写了一个Arduino函数,它通过串行连接接收格式为“a,b,c,d,e”的字符串,其中a,b,c,d,e是整数,每次接收到新字符串时,我都试图用这些整数更新数组。数据被接收并解析为单个整数,但数组不会正确更新 尝试 下面是代码,我保留了getData()函数,因为它所做的只是从串行连接接收字符串并将其存储在字符数组input(该部分工作正常) 问题 如果我发送一个字符串,如“6,7,8,9,0”,数组读数[]将更新为[289291293295297]无论我发送什么值,我都检查了spl
“a,b,c,d,e”
的字符串,其中a,b,c,d,e是整数,每次接收到新字符串时,我都试图用这些整数更新数组。数据被接收并解析为单个整数,但数组不会正确更新
尝试
下面是代码,我保留了getData()
函数,因为它所做的只是从串行连接接收字符串并将其存储在字符数组input
(该部分工作正常)
问题
如果我发送一个字符串,如
“6,7,8,9,0”
,数组读数[]
将更新为[289291293295297]
无论我发送什么值,我都检查了split
函数中包含的值,它们是正确的,但行读数[x]=split
无法将数组元素更新为该顺序中的5个数字以外的任何数字。当在parseData
函数内部或外部检查读数[n]
的值时,会出现这种情况
此外,如果我在字符串中发送的整数少于5个,例如a、b、c
,则只有第一个数组元素将更改,其他元素将保持为0,例如[289291293,0,0]
在我发现将数组指针传递给函数之前,同样的事情发生在稍微不同的代码上——当我在循环中调用函数时,我只使用了parseData()当我定义函数时,我刚刚使用了void parseData(){
问题
为什么数组没有正确更新?我如何修复它?您的读数是一个整数数组。
而split
是指向char的指针
声明
readings[x] = split
将split(字符的地址)存储为整数值
如果我写
const char *pointer = "42";
int address = pointer;
我没有将整数值42
存储在address
中-我正在存储标识字符串中第一个字符的内存位置的数字
如果你想把一个字符串转换成一个整数,你需要用一个函数来解析它,比如。where isreadings
和input
声明了吗?readings[x]=split;
@P0W哦,我错过了这一点——它们在开始时被声明为全局变量int-readings[5];
和char-input[64];
,以及boolean parsed=true;
@AlexF我刚刚试过,谢谢,但现在我只是在数组中得到了不同的错误值[49,50,51,52,53]<代码> >代码>什么?我以前只使用C++与ARDUNO在一个基本的层次上,在教程或演示中使用它时从来没有见过它正确解释过。
它将指针视为指向字符串开头的指针,并打印字符串。指针错误地存储在数组中,因为它是整数数组,而不是指针数组。谢谢,我使用了atoi
,因为它更简单。我应该意识到我试图在int
数组中存储char
!@S.Dunnim实际上是int
数组中的char*
。
const char *pointer = "42";
int address = pointer;