Чтение файла на esp8266 с выдачей содержимого в браузер

Помогите найти ошибку?
Есть функция получения данных из файла

static char* GetFile(String name)
{
  static char* data;
  if (SD.exists(name))
  {
    fs::File  file_data = SD.open(name);
    if (file_data) 
      while (file_data.available()) 
        strcat(data, file_data.readStringUntil('\n').c_str());
    file_data.close();
  }
  return data;
}

Затем данные я передаю серверу

 server.on("/", [](){
    server.send(200, "text/html; charset=utf-8", GetFile("/index.html"));
});

Компилируется без проблем, но при вызове страницы в браузере, модуль перезапускается
Без static тоже пробовал, так же перезапускается

char* GetFile(String name)
{
  char* data;
  if (SD.exists(name))
  {
    fs::File  file_data = SD.open(name);
    if (file_data) 
      while (file_data.available()) 
        strcat(data, file_data.readStringUntil('\n').c_str());
    file_data.close();
  }
  return data;
}

Если поменять static char* на String, то всё работает как часы.

String GetFile(String name)
{
  String data;
  if (SD.exists(name))
  {
    fs::File  file_data = SD.open(name);
    if (file_data) 
      while (file_data.available()) 
        data += file_data.readStringUntil('\n');
    file_data.close();
  }
  return data;
}

Подскажите пожалуйста, почему с static char* и просто char* не работает?

  • не всегда умножение

Почитай что такое указатели и как с ними работать.

Чтобы получить письма на дом, недостаточно иметь только адрес, следует ещё организовать ёмкость, куда почтальон будет кидать эти письма.

6 лайков

Потому что разберись что делает операция сложения на указателях. И вообще прочитай введение в язык C, чтобы не делать такой чуши.

В третьей строке Вы завели переменную типа “указатель на char” data, которой ничего не присвоили. Стало быть, он указывает на случайное место в памяти или вообще за её пределами. А в девятой строке Вы в это самое случайное место что-то пишете. Что за место и что там должно быть - ХЗ, но Вы туда нагло пишете, стирая всё, что там было раньше. Эффект от таких действий непредсказуем, может произойти всё, что угодно.

и чаще всего это приводит или к зависанию, или к перезагрузке

Спасибо за разъяснение, почитал Ваши статьи насчёт static всё стало понятно.