Я (неправильно) использую класс Arduino String .Вся моя программа:
void setup() {
Serial.begin(9600);
}
void loop() {
const String args[3] = {
"foo", "bar", "baz" };
String result = "";
Serial.println(result);
result += args[0];
Serial.println(result);
result += args[1];
Serial.println(result);
result += args[2];
Serial.println(result);
Serial.println();
}
Это печатает:
foo
foobar
foobarbaz
foo
foobar
foobarbaz
foo
foobar
foobarüÿ
foo
foobar
foobarüÿ
foo
foobar
foobar
foo
foobar
foobarüÿ
foo
foobar
foobarüÿ
foo
foobar
foobarüÿ
Я не уверен, почему он не всегда печатает:
foo
foobar
foobarbaz
Что можетЯ делаю неправильно?
Обновление : я пытался добавить четвертую строку в массив.Теперь программа останавливается через 15 раз через loop()
или около того.
Обновление 2 : вот код для оператора добавления String
:
const String & String::operator+=( const String &other )
{
_length += other._length;
if ( _length > _capacity )
{
char *temp = (char *)realloc(_buffer, _length + 1);
if ( temp != NULL ) {
_buffer = temp;
_capacity = _length;
} else {
_length -= other._length;
return *this;
}
}
strcat( _buffer, other._buffer );
return *this;
}
Обновление 3 : Если заменить:
String result = "";
на:
String result = args[0];
Проблема исчезнет.Интересно.