Могут быть и другие проблемы, но для начала:
int topicLength = topicString.length();
char topicBuffer[topicLength];
topicString.toCharArray(topicBuffer,topicLength+1);
Вы объявляете буфер размером topicLength
байт, а затем копируете в него topicLength + 1
байт.Вы всегда будете переполнять буфер одним байтом.Вам нужно объявить его длиной topicLength + 1
байт, чтобы было место для ограничителя строки \0
языка Си.Итак:
int topicLength = topicString.length();
char topicBuffer[topicLength+1];
topicString.toCharArray(topicBuffer,topicLength+1);
или, что лучше:
int topicLength = topicString.length()+1;
char topicBuffer[topicLength];
topicString.toCharArray(topicBuffer,topicLength);
То же самое для dataBuffer
позже, а также pubTopic
, messageBuffer
и любого другого места, куда вы превращаетесь String
в массив char
.
Также обратите внимание, что ваша строка
subTopic.toCharArray (subTopicBuffer, subTopicLength);
не добавляет 1 к длинегде вы добавляете 1 к длине везде.