我如何将许多char*数组放入二维数组中

How do I put a number of char* arrays into a two dimensional array?

本文关键字:数组 二维数组 char 许多      更新时间:2023-10-16

我有一个char数组char *menu_strings[8];,我可以在可重复使用的菜单()函数中动态屏幕菜单的选项。我可以用手工型字符串单独更改项目,例如menu_strings[0] = "New";等。但是,我该如何从另一个功能中返回char*并将其插入数组的"字符串"之一?如果我尝试使用类似的功能使用该函数循环遍历数组:

for (i=0; i<8; i++)
{
  char returnedOption[32];
  if (getOption(i, returnedOption))
    menu_strings[i] = returnedOption;
}
bool getOption(byte entryNum, char* option) {  //code and stuff  }

...所有8个Menu_strings都填充了第八/最后一个选项(i = 7),而不是每个单独的条目的字符串...

for (i=0; i<8; i++)
  Serial.println(menu_strings[i]);

输出:

option eight
option eight
option eight
option eight
option eight
option eight
option eight
option eight

我正在使用Arduino IDE,但自信地认为我会在此处搞砸指针的用法。另外,返回的char*永远不会超过31个字符和空指针。

非常感谢Paulmckenzie,Yardpenalty和Deviantfan带领我找到答案:

摆脱char *业务,只需使用std::string即可。你也是 考虑到您发布的内容,可能会返回本地阵列的地址。 如果您这样做,返回本地变量的地址是 未定义的行为。

这导致我使用arduino string对象,而不是char* https://www.arduino.cc/en/reference/stringobject并使用toCharArray()进行坚持使用炭指针的任何库调用。这有效,但增加了约2K(或我的可用程序内存的7%!)。

最后,我放弃了 *指针,因为这是不正确的,并且按照Deviantfan和Yardpenalty的建议正确使用strcpy,以远离String库。它的负债在这里进一步赞扬:https://hackingmajenkoblog.wordpress.com/2016/02/04/the-evils-of-arduino-strings/