Initialiser le réseau de chariots en C

Jinku Hu 12 octobre 2023
  1. Utiliser la notation de la liste entrelacée pour initialiser un tableau de “tableaux” en C
  2. Utiliser l’affectation de chaîne pour initialiser un tableau char en C
  3. Utiliser des accolades doubles pour initialiser un tableau de caractères 2D en C
Initialiser le réseau de chariots en C

Cet article présente plusieurs méthodes d’initialisation d’un tableau de char en C.

Utiliser la notation de la liste entrelacée pour initialiser un tableau de “tableaux” en C

Un tableau char est généralement déclaré comme une structure de taille fixe et souvent initialisé immédiatement. La notation de liste entre accolades est l’une des méthodes disponibles pour initialiser le tableau char avec des valeurs constantes. Il est possible de ne spécifier que la partie des éléments dans les accolades car le reste des caractères est implicitement initialisé avec une valeur d’octet nulle. Cela peut être utile si le tableau char doit être imprimé sous forme de chaîne de caractères. Puisqu’il y a un caractère d’octet nul garanti à la fin des caractères valides, alors la fonction printf peut être utilisée efficacement avec le spécificateur de chaîne de format %s pour sortir le contenu du tableau.

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

void printCharArray(char *arr, size_t len) {
  printf("arr: ");
  for (int i = 0; i < len; ++i) {
    printf("%c, ", arr[i]);
  }
  printf("\n");
}

enum { LENGTH = 21, HEIGHT = 5 };

int main() {
  char c_arr[LENGTH] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
  printCharArray(c_arr, LENGTH);

  exit(EXIT_SUCCESS);
}

Production :

arr: a, b, c, d, e, f, g, , , , , , , , , , , , , , ,

Utiliser l’affectation de chaîne pour initialiser un tableau char en C

Une autre méthode utile pour initialiser un tableau char est d’assigner une valeur de chaîne dans la déclaration. La chaîne littérale doit avoir moins de caractères que la longueur du tableau ; sinon, il n’y aura qu’une partie de la chaîne stockée et aucun caractère nul de terminaison à la fin du tampon. Ainsi, si l’utilisateur tente d’imprimer le contenu du tableau avec le spécificateur %s, il pourrait accéder à la zone de mémoire après le dernier caractère et lancera probablement une erreur.

Notez que c_arr a une longueur de 21 caractères et est initialisé avec une chaîne de 20 char de long. Par conséquent, le 21ème caractère du tableau est garanti d’être un octet \0, ce qui fait du contenu une chaîne de caractères valide.

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

void printCharArray(char *arr, size_t len) {
  printf("arr: ");
  for (size_t i = 0; i < len; ++i) {
    printf("%c, ", arr[i]);
  }
  printf("\n");
}

enum { LENGTH = 21, HEIGHT = 5 };

int main() {
  char c_arr[LENGTH] = "array initialization";
  char c_arr2[LENGTH] = "array initialization.f";
  printCharArray(c_arr, LENGTH);
  printCharArray(c_arr2, LENGTH);
  printf("%s\n", c_arr);
  printf("%s\n", c_arr2);

  exit(EXIT_SUCCESS);
}

Production :

arr: a, r, r, a, y,  , i, n, i, t, i, a, l, i, z, a, t, i, o, n,  ,
arr: a, r, r, a, y,  , i, n, i, t, i, a, l, i, z, a, t, i, o, n, .,
array initialization
array initialization.//garbage values//

Utiliser des accolades doubles pour initialiser un tableau de caractères 2D en C

La liste des boucles entrelacées peut également être utilisée pour initialiser des tableaux de char bidimensionnels. Dans ce cas, nous déclarons un tableau de 5x5 char et incluons cinq chaînes de caractères entrelacées à l’intérieur des accolades extérieures. Notez que chaque chaîne littérale dans cet exemple initialise les rangées de cinq éléments de la matrice. Le contenu de ce tableau bidimensionnel ne peut pas être imprimé avec le spécificateur %s car la longueur de chaque ligne correspond à la longueur des chaînes littérales ; ainsi, il n’y a pas d’octet nul de terminaison stocké implicitement pendant l’initialisation. Habituellement, le compilateur avertira si les chaînes de caractères littérales sont plus longues que les lignes du tableau.

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

enum { LENGTH = 5, HEIGHT = 5 };

int main() {
  char c_arr[HEIGHT][HEIGHT] = {
      {"hello"}, {"there"}, {"multi"}, {"dimen"}, {"sion."}};

  for (size_t i = 0; i < HEIGHT; ++i) {
    for (size_t j = 0; j < HEIGHT; ++j) {
      printf("%c, ", c_arr[i][j]);
    }
    printf("\n");
  }
  printf("\n");

  exit(EXIT_SUCCESS);
}

Production :

h, e, l, l, o,
t, h, e, r, e,
m, u, l, t, i,
d, i, m, e, n,
s, i, o, n, .,
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