Код использует следующую последовательность для копирования входных данных в буфер.
Buffer_return *buff1 = BTSerialRcvBuffer();
char *ssid = (char*) malloc((buff1->buff_len) * sizeof(char));
strcpy(ssid,buff1->rtn_addr);
Напомним, что строки заканчиваются NUL, так что распределение должно включать дополнительный байт !. Простое обновление для вызова malloc:
char *ssid = (char*) malloc((buff1->buff_len+1) * sizeof(char));
Для каждого входа из @lundin malloc не рекомендуется для Arduino. Лучше использовать автоматическое распределение.
См. Также: https://arduino.stackexchange.com/questions/682/is-using-malloc-and-free-a-really-bad-idea-on-arduino
char ssid[buff2->buff_len+1] ;
strcpy(ssid, buff2->rtn_addr) ;
Обновление 1: ошибка в BTSerialRcvBuffer
BTSerialRcvBuffer
использует статическое для многих переменных, включаяi
. Напомним, что статические переменные инициализируются один раз (при запуске программы). Предлагая удалить «static» из i
- чтобы исправить инициализацию, так как нет необходимости делать ее статичной.
Кроме того, неясно, почему последние 2 позиции rcv_buffer
обнуляются?