Возникли проблемы с функцией sprintf и строковым классом

в своем коде я использовал класс string для создания массива для хранения пунктов меню

String menu[2] = {{"Menu 1"}, {"Menu2"}};

Как преобразовать это в массивы символов и как их вызвать?

Example:
Serial.println(menu[0]);

, 👍1

Обсуждение

Похоже, вы ищете menu[0].c_str(), @KIIV

const char* меню[2] = {"Меню 1", "Меню2"};, @Juraj

Кстати, вы можете получить доступ к строке. Вы вызываете функцию. Вы не вызываете строку., @Delta_G


1 ответ


Лучший ответ:

2

Создайте их как массивы символов следующим образом:

const char* menu[2] = {"Menu 1", "Menu 2"};

и использовать их следующим образом:

Serial.println(menu[0]);
,

Строго говоря, это массив char*, а не массив char. И вы должны обрабатывать «Меню 1» как const char*, чтобы позволить компилятору запретить вам делать глупости. И избегайте предупреждения: ISO C++ запрещает преобразование строковой константы в 'char*' [-Wwrite-strings], @DataFiddler

Отредактировано для константы., @Delta_G

Это массив char*. И каждый из этих указателей указывает на массив символов, а не на строку. Моя точка зрения заключалась в том, чтобы различать массив символов и объект String., @Delta_G

Согласованный. Даже текст предупреждения называет "hello" строковой константой. Но string (строковые литералы, также известные как массив const char) и Arduino String Objects настолько разные, что нам следует полностью избегать использования термина *string*., @DataFiddler