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
-
Utilisez la notation
char*
Array pour déclarer un 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),
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 FacebookArticle connexe - C Array
- Allocation dynamique d'un tableau en C
- Copier le tableau de caractères en C
- Effacer le tableau de caractères en C
- Imprimer le tableau de caractères en C
- Initialiser le réseau de chariots en C