Проблема с функцией toCharArray
- Войдите на сайт для отправки комментариев
У меня 3 переменные типа String, мне следует их преобразовать в char[] и дальше использовать по коду. Если я делаю вывод первой переменной сразу после конвертации, то все ок. Если вывожу ее состояние после конвертации второй переменной, то значение первой превращается в пусто.
Вот примеры:
1. Code:
char _ssid[ssid.length()];
ssid.toCharArray(_ssid, ssid.length()+1);
Serial.println(_ssid);
char _pass[pass.length()];
pass.toCharArray(_pass, pass.length()+1);
Serial.println(_pass);
char _key[key.length()];
key.toCharArray(_key, key.length()+1);
Serial.println(_key);
Result:
a_dcg
j3qq4h7h2v
D0D0DEADF00DABBADEAFBEADED
2. Code:
char _ssid[ssid.length()];
ssid.toCharArray(_ssid, ssid.length()+1);
Serial.println(_ssid);
char _pass[pass.length()];
pass.toCharArray(_pass, pass.length()+1);
char _key[key.length()];
key.toCharArray(_key, key.length()+1);
Serial.println(_key);
Serial.println(_pass);
Result:
a_dcg
D0D0DEADF00DABBADEAFBEADED
3. Code:
char _ssid[ssid.length()];
ssid.toCharArray(_ssid, ssid.length()+1);
char _pass[pass.length()];
pass.toCharArray(_pass, pass.length()+1);
char _key[key.length()];
key.toCharArray(_key, key.length()+1);
Serial.println(_ssid);
Serial.println(_pass);
Serial.println(_key);
Result:
D0D0DEADF00DABBADEAFBEADED
Что я делаю не так?
Выход за пределы массива тому причина.
Вы же в функцию передаете длинну на 1 больше:
поэтому выходите за пределы объявленного массива. Надо увеличить длинну массива на 1 при объявлении:
Добавление единицы свяазано с тем, что без этого был укорочен результат на один символ . Так в первом примере верно все выводится:
a_dcg
j3qq4h7h2v
D0D0DEADF00DABBADEAFBEADED
А когда просто переношу строку вывода переменной ниже, то уже не выводится.
И???
вопрос остается таким же, почему так работает
char _ssid[ssid.length()];
ssid.toCharArray(_ssid, ssid.length()+1);
Serial.println(_ssid);
char _pass[pass.length()];
pass.toCharArray(_pass, pass.length()+1);
Serial.println(_pass);
а так уже нет? _ssid содержит уже пусто.
char _ssid[ssid.length()];
ssid.toCharArray(_ssid, ssid.length()+1);
char _pass[pass.length()];
pass.toCharArray(_pass, pass.length()+1);
Serial.println(_pass);
Serial.println(_ssid);
Я понять не могу вы куда смотрите? вы сообщение #1 до конца дочитали?
Надо увеличить длинну массива на 1 при объявлении:
Дочитал =) и не один раз.
Так ведь работает. И увеличивать не надо.
char _ssid[ssid.length()];
ssid.toCharArray(_ssid, ssid.length()+1);
Serial.println(_ssid);
Я не могу понять, как вывод переменной в другом месте влияет на состояние самой переменной?
Я же вам написал.
Вы выходите за пределы объявленного массива, то есть работаете с памятью не зная что в ней находится. В данном конкретном случае так получилось, что вы при заполнении последующего массива записываете последний символ \0 в первый элемент предыдущего массива.
Вот смотрите.
Объявим массив размером 5 элементов, а заполним 6 элементов:
все хорошо не смотря на то что мы вышли за пределы.
А теперь объявим два массива:
Как доберусь до Arduino, попробую сделать. Отпишусь о результате.
Заработало, спасибо!
Здравствуйте уважаемые, у меня вопрос из той же оперы.
Дано:
результат строки 3: A9
Результат строки 5: А
результат строки 7: 9
далее
Цикл не идет.
пробовал в строке 3:
Результат нулевой. Что я делаю не так?
Может ; после for не нужна
Спасибо бро! Затупил ))
Но все равно преобразование типов у меня нормально не работает. вместо заявленных 10 шагов он делает 56.
В другой теме же объясняли про символы и байты ) выполните serial.printl(curarray[1], DEC) там будет далеко не то что ожидаете, надо 48 вычесть чтобы получить из символа цифру
Спасибо )