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
.