Skip to content

今天写一段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编码规范里,只要是传递 数组作为参数,那么一定要把数组长度作为参数传进的深意

最后更新时间: