Глобальная переменная не изменяется, когда значение задано в логической функции

У меня есть булева функция, которая содержит строку. В моем основном проекте эта строка извлекается из веб-сайта с помощью 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

, 👍0


1 ответ


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

1

У вас есть локальная переменная MPass в функции restoreConfig. Он "отбрасывает тень" на глобальную переменную.

,

Привет @Juraj, я понимаю, что это так, и с тех пор раскомментировал локальную переменную MPass, однако теперь мой вывод не показывает ничего, кроме пустого. Если я попытаюсь переместить символ MPass[mqttpasslen], то у меня возникнет проблема, что mqttpasslen не определен. У вас есть какие-либо предложения относительно того, как я могу решить эту проблему?, @Lachlan Etherton

глобальная переменная-это всего лишь указатель. измените его на массив, чтобы выделить место., @Juraj