Arduino strcpy Funktion

Arduino strcpy Funktion

In diesem Tutorial besprechen wir das Kopieren eines Strings von einer Variablen in eine andere mit der Funktion strcpy() in Arduino.

Arduino-Funktion strcpy()

Die Funktion strcpy() kann einen String inklusive dem Nullzeichen von einer Variablen in eine andere kopieren. Die grundlegende Syntax der Funktion strcpy() ist unten dargestellt.

output = strcpy(dest, source);

Der erste Eingang der Funktion strcpy() sollte den Datentyp char haben, der zweite Eingang den Datentyp const char. Diese Funktion gibt die kopierte Zeichenfolge als Zeichenfolge zurück.

Wenn die Zielgröße die Quellgröße überschreitet, fügt die Funktion strcpy() auch ein NUL-Zeichen als Abschlusszeichen in die Zielzeichenfolge ein. Wenn in der Zielzeichenfolge bereits eine Zeichenfolge gespeichert ist, wird die vorherige Zeichenfolge durch die neue Zeichenfolge überschrieben.

Lassen Sie uns zum Beispiel einen String definieren und ihn mit der Funktion strcpy() in eine andere Variable kopieren. Siehe Code unten.

void setup() {
  const char* source = "Hello World";
  char destination[17];
  Serial.begin(9600);
  strcpy(destination, source);
  Serial.println(destination);
}
void loop() {

}

Ausgabe:

Hello World

Im obigen Code haben wir den seriellen Monitor von Arduino verwendet, um den String zu drucken, der in der Variablen destination gespeichert ist. Die Länge der destination-Variablen sollte gross genug sein, um den gesamten source-String aufzunehmen.

Wenn die Länge kleiner als die Zeichenfolge source ist, wird das Ergebnis geändert und die Funktion strcpy() hat ein undefiniertes Verhalten.

Aufgrund der unterschiedlichen Größe der Strings source und destination läuft die Funktion strcpy() über, was zu Problemen im Code führt. Arduino zeigt wegen Überlauf keinen Fehler an und es kann eine Weile dauern, bis das Problem behoben ist.

Ändern wir zum Beispiel die Größe der Variable destination auf 5, was im obigen Code 17 ist, und überprüfen Sie das Ergebnis. Siehe Code unten.

void setup() {
  const char* source = "Hello World";
  char destination[5];
  Serial.begin(9600);
  strcpy(destination , source);
  Serial.println(destination);
}
void loop() {

}

Ausgabe:

Èõüÿ

Wie wir in der obigen Ausgabe sehen können, wurde das Ergebnis geändert, da die Größe der Variable destination kleiner ist als die der Variablen source. Für ein gutes Ergebnis müssen wir sicherstellen, dass die Größe der destination-Variablen größer ist als die Größe der source-Variablen.

Wir können die längenbegrenzte Version der Funktion strcpy() verwenden, die strncpy() ist. Die Funktion strncpy() kopiert ebenfalls den source-String in die destination-Variable, nimmt aber auch die Länge des Ziels als Eingabe.

Die Funktion strncpy() schreibt nur dann NUL-Zeichen, um den verbleibenden Platz der destination-Zeichenfolge zu füllen, wenn ein NUL-Zeichen aus der source-Zeichenfolge angetroffen wird. Wenn der source-String kein NUL-Zeichen enthält, wird der destination-String nicht mit einem NUL-Zeichen abgeschlossen.

Wiederholen wir zum Beispiel das obige Beispiel mit der Funktion strncpy(). Siehe Code unten.

void setup() {
  const char* source = "Hello World";
  char destination[5];
  Serial.begin(9600);
  strncpy(destination , source, sizeof(destination));
  Serial.println(destination);
}
void loop() {

}

Ausgabe:

Hello

Die Ausgabe dieses Beispiels enthält die ersten 5 Zeichen der source. Wenn wir also die Funktion strncpy() verwenden, müssen wir uns nicht um den Überlauf der Funktion kümmern, da strncpy() die Anzahl der Zeichen der source entsprechend der destination-Größe kopiert .

Diese Funktion ist auch nützlich, wenn wir nicht die gesamte Zeichenfolge kopieren möchten, sondern nur einige Zeichen von der Quelle zum Ziel kopieren möchten. Die Funktionen strcpy() und strncpy() geben ebenfalls den kopierten String vom Datentyp char zurück.

Es gibt auch eine andere längenbegrenzte Version der Funktion strcpy(), nämlich die Funktion strlcpy(). Die Funktion strlcpy() ist die gleiche wie die Funktion strncpy() und der Unterschied besteht darin, dass die Ausgabe der Funktion strlcpy() die Länge der Quellzeichenfolge ist.

Anders als die Funktion strncpy() schreibt die Funktion strlcpy() nicht mehrere NUL-Zeichen, um den verbleibenden Platz des destination-Strings zu füllen, und sie schreibt nur ein einziges NUL-Zeichen in den destination-String. Der destination-String wird immer mit einem einzelnen NUL-Zeichen unter Verwendung der Funktion strlcpy() abgeschlossen.

Die in der destination-Zeichenfolge gespeicherten Zeichen enthalten auch das NUL-Zeichen. Wenn zum Beispiel die Länge des destination-Strings 5 ​​ist, können wir wegen des NUL-Zeichens nur vier Zeichen darin kopieren.

Wir müssen also die Größe des destination-Strings auf 6 erhöhen, um 5 Zeichen darin zu kopieren. Dies ist jedoch bei den Funktionen strcpy() und strncpy() nicht der Fall, die nur dann ein NUL-Zeichen hinzufügen, wenn die Grösse des destination-Strings grösser ist als die Grösse des source-Strings.

Wiederholen wir zum Beispiel das obige Beispiel mit der Funktion strlcpy(). Siehe Code unten.

void setup() {
  const char* source = "Hello World";
  char destination[5];
  Serial.begin(9600);
  strlcpy(destination , source, sizeof(destination));
  Serial.println(destination);
}
void loop() {

}

Ausgabe:

Hell

Wie wir in der Ausgabe sehen können, wurden vier Zeichen des source-Strings in den destination-String kopiert, selbst wenn die destination-Größe 5 ist. Dies liegt daran, dass die strlcpy()-Funktion auch das NUL-Zeichen bei hinzugefügt hat das Ende der Zeichenfolge destination.

Author: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

Verwandter Artikel - Arduino String

  • Arduino strcmp-Funktion
  • Verkettung von Strings in Arduino
  • String aufteilen in Arduino
  • Vergleichen Strings in Arduino
  • Arduino Char zu String