Глобальная переменная не изменяется, когда значение задано в логической функции
У меня есть булева функция, которая содержит строку. В моем основном проекте эта строка извлекается из веб-сайта с помощью ESP8266, который совместим с Arduino IDE. Мне нужно преобразовать эту строку в тип char*, который будет использоваться в разделе loop() кода. Проблема, с которой я столкнулся, связана с настройкой глобальной переменной MPass, которая не изменяется, когда она выполняется в логической функции restoreConfig (), то есть она остается пустой при вызове в цикле.
Я действительно понимаю, что эта проблема связана с тем фактом, что я определяю MPass внутри булевой функции, однако я не уверен относительно процесса, в котором я могу изменить глобальную переменную без ошибок.
Я попытался решить эту проблему, переместив переменные mqttpass, mqttpasslen и MPass из функции restoreConfig (), однако это создает значительно больше проблем, чем то, что у меня есть на данный момент. В результате я только представил код без каких-либо корректировок ниже:
char* mPass = "";
void setup() {
Serial.begin(115200);
}
void loop() {
if (restoreConfig()) {
Serial.println(mPass);
Serial.println("ВЫШЕ ПРИВЕДЕН MPass В ЦИКЛЕ");
}
delay(1000);
}
boolean restoreConfig() {
String mqttpass = "DOGS";
int mqttpasslen = mqttpass.length() + 1;
char mPass[mqttpasslen];
mqttpass.toCharArray(mPass, mqttpasslen);
Serial.println(mPass);
Serial.println("ВЫШЕ ПРИВЕДЕН MPass В ЛОГИЧЕСКОМ ВЫРАЖЕНИИ");
return true;
}
Мой текущий выход из этого:
DOGS
ABOVE IS mPass IN BOOLEAN
ABOVE IS mPass IN LOOP
1 ответ
Лучший ответ:
У вас есть локальная переменная MPass в функции restoreConfig. Он "отбрасывает тень" на глобальную переменную.
- Функция запуска при срабатывании
- Как объявить массив переменного размера (глобально)
- Преобразование long в массив символов и обратно
- Esp8266 Vin контакт
- контент» не захватывается
- Получение имени перечисления из экземпляра перечисления
- Отправка данных из ESP8266 в PHP
- Как передать переменные в пользовательские функции обратного вызова
Привет @Juraj, я понимаю, что это так, и с тех пор раскомментировал локальную переменную MPass, однако теперь мой вывод не показывает ничего, кроме пустого. Если я попытаюсь переместить символ MPass[mqttpasslen], то у меня возникнет проблема, что mqttpasslen не определен. У вас есть какие-либо предложения относительно того, как я могу решить эту проблему?, @Lachlan Etherton
глобальная переменная-это всего лишь указатель. измените его на массив, чтобы выделить место., @Juraj