Запись в Strings.

Тема в разделе "Arduino & Shields", создана пользователем yhl, 15 ноя 2015.

  1. yhl

    yhl Нерд

    У меня есть такой пример
    Код (C++):
    char* myStrings[]={"This is string 1", "This is string 2", "This is string 3",
    "This is string 4", "This is string 5","This is string 6"};

    void setup(){
    Serial.begin(9600);
    for (int i = 0; i < 6; i++){
       Serial.println(myStrings[i]);
       delay(500);
       }
    }

    void loop(){

    }
    но здесь записывается уже готовые строки, а мне надо записывать полученное время с GPRS и выводить на lcd. Как записать что то в Strings, а потом вывести на lcd?
     
  2. geher

    geher Гуру

    Есть три подхода.
    1. Зарезервировать пространство под "обычные" строки и использовать его (придется заранее озаботиться выделением пространства такого размера, чтобы его всегда хватало):
    Код (C):

    char myStrings[6][20]={"", "", "", "", "", ""};

    void setup(){
       Serial.begin(9600);
       for (int i = 0; i < 6; i++){
          sprintf(myStrings[i],"Строка %d", i);
          Serial.println(myStrings[i]);
          delay(500);
       }
    }

    void loop(){

    }
     
    2. Динамически выделять память под "обычные" строки (тут надо следить за выделением и освобождением памяти, дабы не случилось плохого в виде доступа к не инициализированному указателю и утечек памяти):
    Код (C):

    char** myStrings;

    void setup(){
       Serial.begin(9600);
       myString=malloc(6*sizeof(char*))
       for (int i = 0; i < 6; i++){
          myString[i]=malloc(20);
          sprintf(myStrings[i],"Строка %d", i);
          Serial.println(myStrings[i]);
          delay(500);
       }
       for (int i = 0; i < 6; i++){
           free (myString[i]);
       }
       free(myString);
    }

    void loop(){

    }
     
    3. Использовать класс String (в случаях, когда речь идет о необходимости выиграть пару байт в памяти, может оказаться слишком затратным):
    Код (C):

    String myString[6];

    void setup(){
       Serial.begin(9600);
       for (int i = 0; i < 6; i++){
          myString[i]="Строка ";
          myString[i]+=String(i);
          Serial.println(myStrings[i]);
          delay(500);
       }
    }

    void loop(){

    }
     
     
    Последнее редактирование: 15 ноя 2015