今天写一段esp32代码(arduino) 要将一个以,分割的字符串提取到数组 代码
c
void toArray(String data, String *info,)
{
if (data.length() > 0)
{
int commaPosition = -1;
// 用字符串数组存储
for (int i = 0; i < 24; i++)
{
commaPosition = data.indexOf(',');
if (commaPosition != -1)
{
info[i] = data.substring(0, commaPosition);
data = data.substring(commaPosition + 1, data.length());
}
else
{
if (data.length() > 0)
{
info[i] = data.substring(0, commaPosition);
}
}
}
}
}
本来想通过改变for循环里的循环次数来增大 他能处理的长度,结果发现出现错误
Guru Meditation Error: Core panic'ed
后来通过这篇帖子,发现可能是访问的无效内存
https://blog.csdn.net/weixin_42942530/article/details/103975237
寻找发现 有一段代码也用了这个函数
c
String ip[10];
toArray(tcp_ip,ip);
这段代码目标数组较短,导致报错,于是改为
c
/******************************************************************************
*函数名: toArray()
* 功 能:去除字符串里的',',保存到数组
* 输 入: 待转换值 Length:目标数组的长度
* 输 出:转换后的值
*/
void toArray(String data, String *info, int Length)
{
if (data.length() > 0)
{
int commaPosition = -1;
// 用字符串数组存储
for (int i = 0; i < Length; i++)
{
commaPosition = data.indexOf(',');
if (commaPosition != -1)
{
info[i] = data.substring(0, commaPosition);
data = data.substring(commaPosition + 1, data.length());
}
else
{
if (data.length() > 0)
{
info[i] = data.substring(0, commaPosition);
}
}
}
}
}
这才想起c编码规范里,只要是传递 数组作为参数,那么一定要把数组长度作为参数传进的深意