serial.print не отображает массив

genia1991
Offline
Зарегистрирован: 25.12.2019

не получается вывести массив в 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);
    }
    
}

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

genia1991, а вы книгу читать пробовали. Или вы думаете, что ради вас язык Си перепишут.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Вам чего надо - посимвольно вывести строку? Зачем весь онанизм с toCharArray и пр.? Всё гораздо проще:

String str = F("Hello, world!");

for(size_t i=0;i<str.length();i++)
{
  Serial.println(str[i]);
}

 

genia1991
Offline
Зарегистрирован: 25.12.2019

qwone пишет:

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);
   }
}

не могу понять что делаю не так

genia1991
Offline
Зарегистрирован: 25.12.2019

DIYMan пишет:

Вам чего надо - посимвольно вывести строку? Зачем весь онанизм с toCharArray и пр.? Всё гораздо проще:

String str = F("Hello, world!");

for(size_t i=0;i<str.length();i++)
{
  Serial.println(str[i]);
}

 

да спасибо. но я учусь и хотел бы перевести string в массив а потом вывести с массива в монитор :)

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

genia1991 пишет:
не могу понять что делаю не так

11 строка. Нельзя объявлять массив с размерностью переменная. только константы.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

qwone пишет:

genia1991 пишет:
не могу понять что делаю не так

11 строка. Нельзя объявлять массив с размерностью переменная. только константы.

Квон, ты сейчас неправ. Почитай стандарт С++ - такая запись допустима. Вот, почитай: http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

genia1991 пишет:

да спасибо. но я учусь и хотел бы перевести string в массив а потом вывести с массива в монитор :)

Зачем, если String внутри себя хранит массив, и предоставляет вам методы для доступа к нему? Зачем лишние телодвижения? Если хотите научиться работать с массивами - работайте с массивами, без посредников в виде класса String - тогда каши в голове будет меньше, намного.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

DIYMan пишет:
Квон, ты сейчас неправ. Почитай стандарт С++ - такая запись допустима c C++14, относится к converted constant exspression, если я где-то ошибся - ЕвгенийП или Ворота - поправят ;)

Компилирует , но ссука еще и ошибку на это показывает.

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 байт.
*/

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Не ошибку, а варнинг ;) Который просто говорит, что ты чего-то там устанавливаешь, но потом - нигде не используешь до выхода из области видимости. Вот тебе ишшо: http://www.compiler.su/massivy-peremennoj-dliny-v-c-plus-plus.php

Выше я апшипся - c С99 доступна фича сия.

genia1991
Offline
Зарегистрирован: 25.12.2019

спасибо всем. позже прочитаю комменты.

работает вот так. лишний символ в 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);
    }
    
}

 

genia1991
Offline
Зарегистрирован: 25.12.2019

промучился целый час :)

genia1991
Offline
Зарегистрирован: 25.12.2019

точнее вот этот символ в 14 строке

;

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Так вы заходите за последний символ строки. Сделайте в условии for i < myString_len-1 - и всё. Или в строке 9 уберите +1.

genia1991
Offline
Зарегистрирован: 25.12.2019

DIYMan пишет:

Так вы заходите за последний символ строки. Сделайте в условии for i < myString_len-1 - и всё. Или в строке 9 уберите +1.

спасибо. уже все отлично работает :)