Arduino: die Schwierigkeit mit der String-Verkettung

Ich bin (mis-)mit dem Arduino String Klasse. Mein ganzes Programm:

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

Diese Drucke:

foo
foobar
foobarbaz


foo
foobar
foobarbaz


foo
foobar
foobarüÿ


foo
foobar
foobarüÿ


foo
foobar
foobar


foo
foobar
foobarüÿ


foo
foobar
foobarüÿ


foo
foobar
foobarüÿ

Ich bin mir nicht sicher, warum es nicht einfach immer drucken:

foo
foobar
foobarbaz

Was könnte ich falsch gemacht?

Update: ich habe versucht, das hinzufügen einer vierten string in das array. Jetzt wird das Programm beendet nach 15 mal durch loop() oder so.

Update 2: Hier ist die code für die String append-operator:

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

Update 3: Wenn ich ersetzen:

  String result = "";

mit:

  String result = args[0];

Verschwindet das problem. Interessant.

  • Ähm, warum nicht std::string?
  • Gibt es das auf Arduino? Ich glaube nicht, es war.
  • Es ist eine Portierung der STL für den arduino: arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1295132807, aber, wie der Autor sagt, Sie brauchen, um zu sehen, Ihre Speicher ziemlich eng.
  • Haben Sie versucht, nur deklarieren Ergebnis ohne initialisieren: String Ergebnis; ich denke, ich erinnere mich Ringen mit der Arduino string Klasse selbst, und ich bin mir nicht sicher, dass er immer das richtige tut mit null-Terminierung.
  • Haben Sie versucht, mit String result = String("");?
InformationsquelleAutor Nick Heiner | 2011-04-25
Schreibe einen Kommentar