Tableau de chaînes de caractères en C

Jinku Hu 12 octobre 2023
  1. Utiliser la notation 2D Array pour déclarer un tableau de chaînes de caractères en C
  2. Utilisez la notation char* Array pour déclarer un tableau de chaînes de caractères en C
Tableau de chaînes de caractères en C

Cet article présente plusieurs méthodes pour déclarer un tableau de chaînes de caractères en C.

Utiliser la notation 2D Array pour déclarer un tableau de chaînes de caractères en C

Les chaînes de caractères en C sont simplement une séquence de caractères stockés dans une région de mémoire contiguë. Une distinction à propos des chaînes de caractères est qu’il y a un octet nul de terminaison \0 stocké à la fin de la séquence, indiquant la fin d’une chaîne. Si nous déclarons un tableau fixe de char en utilisant la notation [], alors nous pouvons stocker une chaîne composée du même nombre de caractères à cet endroit.

Notez qu’un espace de caractère supplémentaire pour l’octet nul de fin doit être pris en compte lors de la copie de la chaîne de caractères à l’emplacement du tableau. Ainsi, on peut déclarer un tableau bidimensionnel char avec une notation entre crochets et l’utiliser comme tableau de chaînes de caractères. La deuxième dimension du tableau limitera la longueur maximale de la chaîne. Dans ce cas, nous définissons arbitrairement une constante macro - MAX_LENGTH égale à 100 caractères. L’ensemble du tableau peut être initialisé avec la notation {""}, qui met à zéro chaque élément char du tableau. Lors du stockage des valeurs des chaînes de caractères dans le tableau déjà initialisé, l’opérateur d’affectation n’est pas autorisé, et des fonctions spéciales de copie de mémoire doivent être employées comme strcpy.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LENGTH 100
#define NUM_STRINGS 10

int main() {
  char arr[NUM_STRINGS][MAX_LENGTH] = {""};

  arr2[0] = "string literal";  // Not permitted
  strcpy(arr[0], "hello world");
  printf("%s\n", arr[0]);
  printf("%s\n", strcpy(arr[0], "hello world"));

  exit(EXIT_SUCCESS);
}

Production :

hello world
hello world

Alternativement, nous pouvons initialiser le tableau bidimensionnel de char instantanément lorsqu’il est déclaré. Le standard moderne C11 permet d’initialiser des tableaux de char avec des littéraux de chaîne et même de stocker automatiquement un octet nul à la fin de la chaîne lorsque la longueur du tableau est supérieure à la chaîne elle-même. La notation de la liste d’initialisation est similaire à la syntaxe du C++. Chaque élément entrelacé est censé être stocké dans une région mémoire consécutive de longueur MAX_LENGTH. Dans le cas où la notation de l’initialisateur spécifie le nombre d’éléments inférieur à la taille du tableau, les éléments restants sont implicitement initialisés avec \0 octets.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LENGTH 100
#define NUM_STRINGS 10

int main() {
  char arr2[NUM_STRINGS][MAX_LENGTH] = {{"first string"},
                                        {"second string"},
                                        {"third string"},
                                        {"fourth string"},
                                        {"fifth string"}};

  for (int i = 0; i < NUM_STRINGS; ++i) {
    printf("%s, ", arr2[i]);
  }

  exit(EXIT_SUCCESS);
}

Production :

first string, second string, third string, fourth string, fifth string, , , , , ,

Utilisez la notation char* Array pour déclarer un tableau de chaînes de caractères en C

char* est le type qui est généralement utilisé pour stocker des chaînes de caractères. Déclarer le tableau de char* nous donne le nombre fixe de pointeurs pointant sur le même nombre de chaînes de caractères. Il peut être initialisé avec des chaînes de caractères littérales comme le montre l’exemple suivant, assigné à ou copié en utilisant des fonctions spéciales fournies dans l’en-tête string.h.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LENGTH 100
#define NUM_STRINGS 10

int main() {
  char* arr3[NUM_STRINGS] = {"first string", "second string", "third string",
                             "fourth string", "fifth string"};
  char* str1 = "string literal";
  arr3[8] = str1;
  arr3[9] = "hello there";

  for (int i = 0; i < NUM_STRINGS; ++i) {
    printf("%s, ", arr3[i]);
  }
  printf("\n");

  exit(EXIT_SUCCESS);
}

Production :

first string, second string, third string, fourth string, fifth string, (null), (null), (null), string literal, hello there,

Comme alternative, on peut spécifier les accolades {} uniquement, ce qui initialisera les pointeurs dans le tableau à null, et ils peuvent être utilisés plus tard pour stocker d’autres adresses de chaînes de caractères, ou le programmeur peut même allouer de la mémoire dynamique.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NUM_STRINGS 10

int main() {
  char *arr4[NUM_STRINGS] = {};
  for (int i = 0; i < NUM_STRINGS; ++i) {
    printf("%s, ", arr4[i]);
  }
  printf("\n");

  exit(EXIT_SUCCESS);
}

Production :

(null), (null), (null), (null), (null), (null), (null), (null), (null), (null),
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Article connexe - C Array

Article connexe - C String