Reference   Language | Libraries | Comparison | Changes

string

Beschreibung

Es gibt zwei verschiedene Möglichkeiten Textstrings darzustellen. Man kann entweder den Datentyp String verwenden, der Bestandteil der Software seit der Version 0019 ist, oder einen String aus einem Feld (Array) von Daten des Types char erstellen und mit einer '\0' (Null-Terminierung) abschließen.

Beispiele

Alle nachfolgenden Beispiele sind gültige Deklarationen für Strings.

  char Str1[15];
  char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
  char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};
  char Str4[ ] = "arduino";
  char Str5[8] = "arduino";
  char Str6[15] = "arduino";

Die verschiedenen Möglichkeiten Strings zu deklarieren

  • Deklaration eines Feldes (Array) ohne Initialisierung, wie bei Str1 dargestellt
  • Bei der Deklaration eines Arrays, die Daten des Typs char (plus ein zusätzliches Zeichen) enthalten, wird der Compiler das benötigte Null-Zeichen ('\0') hinzufügen, wie bei Str2 dargestellt
  • Ausdrückliches Hinzufügen des Null-Zeichens, wie bei Str3 dargestellt
  • Initialisierung mit einer Stringkonstanten in Anführungsstrichen; der Compiler wird die Größe des Arrays so festlegen, dass die Stringkonstante und das abschließende Null Zeichen hineinpasst, wie bei Str4 dargestellt
  • Initialisierung des Arrays mit einer festgelegten Größe und Stringkonstante, wie bei Str5 dargestellt
  • Initialisierung des Arrays mit zusätzlichem Platz für einen größeren String, wie bei Str6 dargestellt

Null-Terminierung

Grundsätzlich werden Strings mit einem Null-Zeichen beendet(ASCII Code 0). Dies erlaubt den Funktionen (wie z.B. Serial.print()) das Ende eines Strings zu erkennen. Wenn dieses Zeichen nicht vorhanden wäre, würden folglich Zeichen aus Speicherbereichen gelesen werden, die nicht mehr zum eigentlichen String gehören.

Das bedeutet, dass ein String Platz für ein Zeichen mehr benötigt, als der Text normalerweise lang ist. Das ist auch der Grund, weshalb Str2 und Str5 acht Zeichen benötigen, obwohl "arduino" nur sieben Zeichen lang ist - die letzte Position wird automatisch mit einem Null-Zeichen gefüllt. Str4 wird automatisch auf die Größe von acht Zeichen gesetzt, eines für die abschließende Null. In Str3 haben wird das Null-Zeichen (wird geschrieben als '\0') ausdrücklich hinzugefügt.

Es ist möglich einen String ohne abschließendes Null-Zeichen zu erzeugen (z.B. wenn die Länge von Str2 mit sieben anstatt mit acht angegeben wird). Das wird aber bei den meisten Funktionen, die mit Strings arbeiten, zu Fehlern oder sogar zu Abbrüchen führen; also sollte man dieses nicht absichtlich herbeiführen. Wenn ein seltsames Verhalten zu bemerken ist (bei der Verwendung von Zeichen außerhalb von Strings), könnte dies jedoch die Ursache sein.

Einfache oder doppelte Anführungszeichen?

Strings werden immer innerhalb von doppelten Anführungszeichen definiert ("Abc") und Zeichen werden immer innerhalb von einfachen Anführungszeichen definiert ('A').

Umbruch langer Strings

Lange Strings können folgendermaßen umgebrochen werden:

char myString[] = "Dies ist die erste Zeile"
" dies ist die zweite Zeile"
" und so weiter";

String-Arrays

Wenn in Projekten mit einer großen Anzahl von Text gearbeitet wird (wie z.B. bei LCD-Projekten), ist es oft sinnvoll ein String-Array zu benutzen. Da Strings aber ebenfalls ein Array darstellen, ist dies ein gutes Beispiel eines zweidimensionalen Arrays.

In dem nachstehenden Code, bedeutet das Asterisk (Sternsymbol) nach dem Datentyp char, dass es sich um ein Array von "Zeigern" handelt. Alle Arraynamen sind letztendlich Zeiger, deshalb ist es notwendig ein Array herzustellen, welches andere Arrays enthält. Zeiger gehören zu den mystischen Teilen der C-Programmiersprache, die für Anfänger schwer zu verstehen sind. Es ist nicht unbedingt notwendig Zeiger im Detail zu verstehen, um sie hier effektiv anzuwenden.

Beispiel


char* myStrings[]={"Dies ist String 1", "Dies ist String 2", "Dies ist String 3",
"Dies ist String 4", "Dies ist String 5","Dies ist String 6"};

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

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

Mehr Informationen

Reference Home

Corrections, suggestions, and new documentation should be posted to the Forum.

The text of the Arduino reference is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.

Share