Как вернуть значение массива символов в функции Arduino IDE?
Функция
char* getConnectDetail(int starting){
String data;
for(int i=0;i< 1024 ;i++) {
if(EEPROM.read(i+starting) != 0){
data += char(EEPROM.read(i+starting));
}
}
int str_len = data.length() + 1;
char char_array[str_len];
data.toCharArray(char_array, str_len);
return char_array;
}
Когда я вызываю его, я получаю значение мусора... без создания функции нет никакой ошибки. Пожалуйста, решите это. Я просто хочу знать, что не так с моим методом возврата.
1 ответ
char char_array[str_len];
является локальным для функции — он создается при входе в функцию, а его память освобождается при выходе из функции. Содержимое этой памяти не определено после ее освобождения, и ее данные могут быть или не быть действительными.
Если вызывающая сторона создает данные
и передает их функции, она переживает весь вызов функции и возврат, и вызывающая сторона находит в ней правильные данные. Другой (менее элегантный) способ сделать это — сделать data
глобальным объектом, что, опять же, дает ему большее время жизни, чем у функции, но глобальные объекты подвержены случайной перезаписи и злоупотреблению со стороны другие функции, поэтому их не рекомендуется использовать, если они действительно не являются лучшим решением в данной ситуации.
Хороший ответ. Другая альтернатива - иметь память функции malloc для массива и возвращать ее. Тогда вызывающий абонент будет нести ответственность за его освобождение, когда с ним будет покончено., @Duncan C
Также обратите внимание, что функция OPs должна каким-то образом вернуть длину массива строк., @Duncan C
Поскольку ему больше не нужно возвращать массив (он принадлежит вызывающему объекту), возвращаемое значение доступно для возврата количества или кода ошибки., @JRobert
- Как удалить элемент из массива arduino?
- Как установить текущее положение двигателя постоянного тока равным нулю + сохранить текущие позиции в массиве и запустить его?
- Почему функция упоминается в глобальной декларации?
- Как создать функцию, которая будет вводить определенное значение для подзначения массива в зависимости от положения джойстика?
- avrdude ser_open() can't set com-state
- Float печатается только 2 десятичных знака после запятой
- ошибка: espcomm_upload_mem failed при загрузке скетча
- Печать массива байтов на экране последовательного монитора Arduino IDE
для будущей помощи при поиске в Интернете, это не «функция Arduino IDE» ... это «функция C++», @jsotola