Main

Référence : Langage Arduino : [ Mini | Standard | Etendue | Maxi ] Librairies : [ Vue d'ensemble | Synthèse ] Infos : [ Comparaison | Changements ]

Les chaînes de caractères ("string" en anglais)


Description

Les chaînes de caractères sont réprésentées sous forme de tableau de variables de type char et se termine par un zéro. Exemples

Toutes les expressions suivantes sont des déclarations valides pour des chaînes de caractère.

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

Les différentes possibilités pour la déclaration des chaînes de caractères

  • Déclarer un tableau de caractères sans l'initialiser (Str1 dans l'exemple).
  • Declarer un tableau de caractères (avec un caractère supplémentaire non utilisé) et le compilateur ajoutera le caractère nul requis (Str2 dans l'exemple)
  • Idem, mais en déclarant explicitement le caractère nul (Str3 dans l'exemple)
  • Initialiser avec une chaîne de caractère constante entre guillemets doublse : le compilateur dimensionnera le tableau pour stocker la chaîne de caractère constante et le caractère nul terminal (Str4 dans l'exemple)
  • Initialiser le tableau avec une taille explicite et une chaîne de caractère contante (Str5 dans l'exemple)
  • Initialiser le tableau, en laissant un espace vide pour une chaîne large (Str6 dans l'exemple)

Le caractère nul final

Généralement, les chaînes de caractères sont terminées avec un caractère nul (code ASCII 0, à distinguer du '0' qui a le code ASCII 48). Cela permet aux fonctions (telle que Serial.print() ) de savoir où se termine la chaîne de caractères. Autrement, les fonctions continueraient à lire les octets de mémoire suivant, bien qu'ils ne fassent pas partie de la chaîne de caractères.

Cela signifie que votre chaîne nécessite d'avoir un espace pour un caractère de plus que le texte qu'elle contient (pour y mettre le caractère nul...). C'est pourquoi les chaînes Str2 et Str5 de l'exemple nécessite 8 caractères, même si la chaîne "Arduino" n'en fait que 7 - la dernière position est automatiquement remplie avec le caractère nul. La chaîne Str4 sera automatiquement dimensionnée à 8 caractère, soit un pour le caractère nul supplémentaire. Dans la chaîne d'exemple Str3, nous avons explicitement inclut nous-mêmes le caractère nul (écrit '\0' et qui correspond au code ASCII 0 - à distinguer répétons-le du caractère '0' qui correspond au code ASCII 48).

Noter qu'il est possible d'avoir une chaîne sans un caractère nul final (pour exemple si vous avez spécifié une longueur de Str2 de 7 au lieu de 8). Ceci aura pour effet d'interrompre l'exécution de la plupart des fonctions qui utilisent des caractères, et donc vous ne devriez pas le faire intentionnellement. Si vous constatez quelque chose qui se comporte étrangement dans un programme (utilisation de caractères qui ne sont pas dans la chaîne par exemple), bien souvent, l'oubli du caractère nul en fin de chaîne peut être la cause du problème.

Guillements simples ou guillemets doubles ?

Les chaînes de caractères sont toujours définies à l'intérieur de guillements doubles ("ABC") et les caractères sont toujours définis à l'intérieur de guillemets simples('A').

Déclaration de longues chaînes de caractères

Vous pouvez scinder de longues chaînes de caractères de la façon suivante :

char myString[] = "Ceci est la première ligne"
" Ceci est la seconde ligne"
" etcetera";

Tableaux de chaînes de caractères

Il est souvent pratique, quand on travaille avec beaucoup de textes larges, tel qu'un projet utilisant un afficheur LCD, de définir un tableau de chaîne de caractère. Puisque les chaînes de caractères sont elle-mêmes des tableaux, c'est en fait un cas particulier de tableau à deux dimensions. Dans le code ci-dessous, l'astérisque après la déclaration de donnée de type char "char*" indique qu'il s'agit d'un tableau de "pointeurs". Tous les noms de tableaux sont en réalité des pointeurs, et c'est donc de qui est requis pour construire un tableau de tableaux. Les "pointeurs" sont une des choses les plus ésotériques du langage C à comprendre pour les débutants, mais il n'est pas nécessaire de comprendre les pointeurs en détail pour les utiliser effectivement ici.

Note du traducteur : un pointeur désigne la localisation en mémoire d'une variable alors que son nom désigne son contenu.

Exemple

// déclaration d'un tableau de pointeurs de chaîne de caractère
char* myStrings[]={"Ceci est la chaine 1", "Ceci est la chaine 2", "Ceci est la chaine  3",
"Ceci est la chaine 4", "Ceci est la chaine  5","Ceci est la chaine  6"};

void setup(){
Serial.begin(9600); // initialise la comunication série
}

void loop(){

// affiche successivement les différentes chaînes de caractères
for (int i = 0; i < 6; i++){
   Serial.println(myStrings[i]);
   delay(500);
   }
}

Commentaires utilisateurs

  • Un problème majeur que l'on va rencontrer avec les chaînes de caractères, c'est l'utilisation de la RAM qui va rapidement saturer (2K pour une UNO contre 32K de mémoire programme) et donner des comportements inattendus. Pour contourner le problème :
  • Une fois qu'un tableau de caractères a été défini, il semble que pour le modifier, il faut accéder à chaque élément sous la forme nomTableau[i]='A'
  • La meilleure solution pour manipuler les chaînes de caractère est l'utilisation de l'objet String().

Voir également


Page d'accueil de la référence Arduino en français

Corrections, suggestions et nouvelle documentation peuvent être postées sur le Forum Arduino ou à l'adresse suivante : support_at_mon-club-elec_point_fr

Le texte original de la référence Arduino est sous licence Creative Commons Attribution-ShareAlike 3.0 . Les exemples de code dans la référence sont dans le domaine public.

La présente traduction française commentée a été réalisée par Xavier HINAULT (2010-2012) (www.mon-club-elec.fr) et est sous licence Creative Commons Attribution-ShareAlike 3.0.