У меня есть массив символов char *menu_strings[8];
, который я заполняю параметрами экранного меню динамически в функции многократного использования(). Я могу изменить элементы индивидуально с помощью строк вручную, например. menu_strings[0] = "New";
и т. Д., Но как взять char *, возвращаемый из другой функции, и вставить его в одну из «строк» массива? Если я пытаюсь Переберите массив с помощью функции с чем-то вроде этого:Как поместить несколько массивов 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 заполнены восьмой/последний вариант возвращается (я = 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, но чувствую себя довольно уверенно, что я бы завинчивание использование указателей в любой C/++/# здесь. Кроме того, возвращаемый символ char * не превышает 31 символ плюс нулевой указатель.
вы используете 'символ *' почему не строка https://www.arduino.cc/en/Reference/String –
'Я могу изменить элементы индивидуально с ручными типизированными строками, например menu_strings [0] = "New"; 'Это не делает то, что вы думаете, что это делает, и в этом проблема. Либо используйте strcpy (но сначала вам понадобятся malloc, free и т. Д.) Или std :: string. – deviantfan
* но как взять char *, возвращаемый из другой функции * - Выйти из 'char *' и просто использовать 'std :: string'. Вероятно, вы также возвращаете адрес локального массива, учитывая то, что вы разместили. Если вы это делаете, возвращение адреса локальной переменной - это неопределенное поведение. – PaulMcKenzie