Fonction Arduino strcpy

Ammar Ali 12 octobre 2023
Fonction Arduino strcpy

Dans ce tutoriel, nous discuterons de la copie d’une chaîne d’une variable à une autre à l’aide de la fonction strcpy() dans Arduino.

Fonction Arduino strcpy()

La fonction strcpy() permet de copier une chaîne contenant le caractère nul d’une variable à une autre. La syntaxe de base de la fonction strcpy() est présentée ci-dessous.

output = strcpy(dest, source);

La première entrée de la fonction strcpy() doit avoir le type de données char, et la deuxième entrée doit être le type de données const char. Cette fonction renverra la chaîne copiée sous forme de chaîne de caractères.

Si la taille de la destination dépasse la taille de la source, la fonction strcpy() ajoutera également un caractère NUL comme terminateur à l’intérieur de la chaîne de destination. Si la chaîne de destination a déjà une chaîne stockée, la chaîne précédente sera écrasée par la nouvelle chaîne.

Par exemple, définissons une chaîne et copions-la dans une autre variable à l’aide de la fonction strcpy(). Voir le code ci-dessous.

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

Production:

Hello World

Dans le code ci-dessus, nous avons utilisé le moniteur série d’Arduino pour imprimer la chaîne, qui est stockée dans la variable destination. La longueur de la variable destination doit être suffisamment grande pour contenir toute la chaîne source.

Si la longueur est inférieure à la chaîne source, le résultat sera modifié et la fonction strcpy() aura un comportement indéfini.

A cause de la différence de taille des chaînes source et destination, la fonction strcpy() va déborder, ce qui causera des problèmes dans le code. Arduino n’affichera pas d’erreur en raison d’un débordement, et cela peut prendre un certain temps pour comprendre le problème.

Par exemple, changeons la taille de la variable destination en 5, qui est 17 dans le code ci-dessus, et vérifions le résultat. Voir le code ci-dessous.

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

Production:

Èõüÿ

Comme nous pouvons le voir dans la sortie ci-dessus, le résultat a été modifié car la taille de la variable destination est inférieure à celle de la variable source. Pour un bon résultat, il faut s’assurer que la taille de la variable destination est supérieure à la taille de la variable source.

Nous pouvons utiliser la version limitée en longueur de la fonction strcpy() qui est strncpy(). La fonction strncpy() copie également la chaîne source dans la variable destination, mais elle prend également la longueur de la destination en entrée.

La fonction strncpy() n’écrira des caractères NUL pour remplir l’espace restant de la chaîne destination que si un caractère NUL est rencontré dans la chaîne source. Si la chaîne source n’a pas de caractère NUL, la chaîne destination ne se terminera pas par un caractère NUL.

Par exemple, répétons l’exemple ci-dessus en utilisant la fonction strncpy(). Voir le code ci-dessous.

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

Production:

Hello

La sortie de cet exemple contient les 5 premiers caractères de la source. Ainsi, si nous utilisons la fonction strncpy(), nous n’avons pas à nous soucier du débordement de la fonction car strncpy() copiera le nombre de caractères de la source en fonction de la taille de la destination .

Cette fonction est également utile lorsque nous ne voulons pas copier toute la chaîne et ne voulons copier que quelques caractères de la source vers la destination. Les fonctions strcpy() et strncpy() renvoient également la chaîne copiée de type char.

Il existe également une autre version limitée en longueur de la fonction strcpy() qui est la fonction strlcpy(). La fonction strlcpy() est la même que la fonction strncpy() et la différence est que la sortie de la fonction strlcpy() est la longueur de la chaîne source.

Contrairement à la fonction strncpy(), la fonction strlcpy() n’écrit pas plusieurs caractères NUL pour remplir l’espace restant de la chaîne destination, et elle n’écrit qu’un seul caractère NUL dans la chaîne destination. La chaîne destination sera toujours terminée par un seul caractère NUL à l’aide de la fonction strlcpy().

Les caractères stockés dans la chaîne destination incluront également le caractère NUL. Par exemple, si la taille de la chaîne destination est de 5, nous ne pouvons y copier que quatre caractères à cause du caractère NUL.

Il faut donc augmenter la taille de la chaîne destination à 6 pour y copier 5 caractères. Cependant, ce n’est pas le cas des fonctions strcpy() et strncpy() qui n’ajoutent un caractère NUL que si la taille de la chaîne destination est supérieure à la taille de la chaîne source.

Par exemple, répétons l’exemple ci-dessus en utilisant la fonction strlcpy(). Voir le code ci-dessous.

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

Production:

Hell

Comme nous pouvons le voir dans la sortie, quatre caractères de la chaîne source ont été copiés dans la destination même si la taille de la destination est de 5. C’est parce que la fonction strlcpy() a également ajouté le caractère NUL à la fin de la chaîne destination.

Auteur: 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

Article connexe - Arduino String