Arduino: Струнный присоединиться? - PullRequest
2 голосов
/ 25 апреля 2011

Я пытаюсь написать join метод для Arduino:

#define ARG_DELIMITER ','

  String join(const String strs[], const int len) {
    String result = "";
    for (int i = 0; i < len; i++) {
      result += strs[i] + ARG_DELIMITER;
      Serial.println(result);
    }
    return result.substring(0, result.length() - 1);
  }

Телефонный код в loop():

const String args[3] = {"foo", "bar", "baz"};
Serial.println(SlaveTalk.join(args, 3));

Это печатает следующее:

foo
foo
foo
fo

, за которыми следуют пустые строки, пока выполняется программа.

Что я здесь не так делаю?

Ответы [ 3 ]

0 голосов
/ 01 июня 2011

Следующий код работает как задумано, используя версию программного обеспечения Arduino 0022 и Arduino Duemilanove с ATmega 328:

#define ARG_DELIMITER ','

class SlaveTalkClass
{
  public:
    String join(const String strs[], const int len) {
      String result = "";
      for (int i = 0; i < len; i++) {
        result += strs[i] + ARG_DELIMITER;
        Serial.println(result);
      }
      return result.substring(0, result.length() - 1);
    }
} SlaveTalk;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  const String args[3] = {"foo", "bar", "baz"};
  Serial.println(SlaveTalk.join(args, 3));
}

Он последовательно печатает на последовательном мониторе следующее:

foo,
foo,bar,
foo,bar,baz,
foo,bar,baz
0 голосов
/ 26 сентября 2012

PString - это отличная библиотека, которая может объединяться. Он обладает некоторыми полезными функциями и, прежде всего, безопасен во время выполнения.

0 голосов
/ 25 апреля 2011

Эта строка

const String args[3] = {"foo", "bar", "baz"};

дает вам строки

"foo\0" "bar\0" "baz\0"

, где \ 0 - это символ NULL.Поэтому, когда вы согласны, я ожидаю, что вы в конечном итоге наберете:

"foo\0bar\0baz\0"

Печать останавливается на нуле, поэтому вы видите foo 3 раза.В операторе return длина равна 3 "foo", а вычитание 1 дает "fo"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...