如何将一些char *数组放入二维数组?

时间:2016-12-17 08:11:08

标签: c++ arrays string arduino

我有一个char数组ecx,我在可重复使用的menu()函数中动态填充了屏幕菜单的选项。我可以用手工打字的字符串单独更改项目,例如char *menu_strings[8];等但是如何从另一个函数返回一个char *并将其插入到一个数组的“字符串”中?如果我尝试使用这样的函数循环遍历数组:

menu_strings[0] = "New";

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

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  }

输出:

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

我正在使用arduino IDE,但我非常自信地认为我会在任何C / ++ /#中使用指针。此外,返回的char *永远不会超过31个字符加上空指针。

1 个答案:

答案 0 :(得分:1)

非常感谢PaulMcKenzie,那个引导我回答问题的邋pen和deviantfan:

  

退出char *业务,只需使用std::string即可。你也是       鉴于您发布的内容,可能会返回本地数组的地址。       如果你这样做,返回局部变量的地址是       未定义的行为。

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

最后,我抛弃了*指针,因为这是不正确的,并按照deviantfan和yardpenalty的建议正确使用strcpy以远离String库。它的责任在这里得到进一步发挥:https://hackingmajenkoblog.wordpress.com/2016/02/04/the-evils-of-arduino-strings/