serial.print не отображает массив
- Войдите на сайт для отправки комментариев
Сб, 18/01/2020 - 21:34
не получается вывести массив в serial
если изменить на myArray[1] или myArray тогда все ок.
такая конструкция не работает : myArray[i]
int i;
String myString ="LOL";
void setup() {
Serial.begin(9600);
}
void loop() {
int myString_len = myString.length() + 1;
char myArray[myString_len];
myString.toCharArray(myArray, myString_len);
for ( i = 0; i < myString_len; i++ ); { // где то здесь ОШИБКА
Serial.println(myArray[i]);
delay(500);
}
}
genia1991, а вы книгу читать пробовали. Или вы думаете, что ради вас язык Си перепишут.
Вам чего надо - посимвольно вывести строку? Зачем весь онанизм с toCharArray и пр.? Всё гораздо проще:
String str = F("Hello, world!"); for(size_t i=0;i<str.length();i++) { Serial.println(str[i]); }genia1991, а вы книгу читать пробовали. Или вы думаете, что ради вас язык Си перепишут.
читаю но не могу понять почему так. вроде все правильно сделал.
похожий пример рабочий
char* myStrings[]={"This is string 1", "This is string 2", "This is string 3"}; void setup(){ Serial.begin(9600); } void loop(){ for (int i = 0; i < 6; i++){ Serial.println(myStrings[i]); delay(500); } }не могу понять что делаю не так
Вам чего надо - посимвольно вывести строку? Зачем весь онанизм с toCharArray и пр.? Всё гораздо проще:
String str = F("Hello, world!"); for(size_t i=0;i<str.length();i++) { Serial.println(str[i]); }да спасибо. но я учусь и хотел бы перевести string в массив а потом вывести с массива в монитор :)
Квон, ты сейчас неправ. Почитай стандарт С++ - такая запись допустима. Вот, почитай: http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html
да спасибо. но я учусь и хотел бы перевести string в массив а потом вывести с массива в монитор :)
Зачем, если String внутри себя хранит массив, и предоставляет вам методы для доступа к нему? Зачем лишние телодвижения? Если хотите научиться работать с массивами - работайте с массивами, без посредников в виде класса String - тогда каши в голове будет меньше, намного.
void setup() { int a=5; int b[a]; b[2]=2; } void loop() { } /*C:\Users\HomePC\Documents\Arduino\sketch_jan18g\sketch_jan18g.ino: In function 'void setup()': C:\Users\HomePC\Documents\Arduino\sketch_jan18g\sketch_jan18g.ino:3:6: warning: variable 'b' set but not used [-Wunused-but-set-variable] int b[a]; ^ Скетч использует 444 байт (1%) памяти устройства. Всего доступно 30720 байт. Глобальные переменные используют 9 байт (0%) динамической памяти, оставляя 2039 байт для локальных переменных. Максимум: 2048 байт. */Не ошибку, а варнинг ;) Который просто говорит, что ты чего-то там устанавливаешь, но потом - нигде не используешь до выхода из области видимости. Вот тебе ишшо: http://www.compiler.su/massivy-peremennoj-dliny-v-c-plus-plus.php
Выше я апшипся - c С99 доступна фича сия.
спасибо всем. позже прочитаю комменты.
работает вот так. лишний символ в 14 строчки {
String myString ="LOL"; void setup() { Serial.begin(9600); } void loop() { int myString_len = myString.length() + 1; char myArray[myString.length()]; myString.toCharArray(myArray, myString_len); for (size_t i = 0; i < myString_len; i++ ) { Serial.println(myArray[i]); delay(500); } }промучился целый час :)
точнее вот этот символ в 14 строке
Так вы заходите за последний символ строки. Сделайте в условии for i < myString_len-1 - и всё. Или в строке 9 уберите +1.
Так вы заходите за последний символ строки. Сделайте в условии for i < myString_len-1 - и всё. Или в строке 9 уберите +1.
спасибо. уже все отлично работает :)