Comment déclarer un tableau de chaine de caractère en C

Quelqu’un peut-il m’expliquer quelle est la différence entre ces déclarations ?

char *tab1 = "Hello";
char tab2[] = "Hello";
char tab3[5] = "Hello";

Dans quel cas dois-je utiliser chacun des déclarations ci-dessus ?

En fait (en oubliant votre troisième exemple qui n’est pas correct), la différence entre tab1 et tab2 est que tab1 alloue de l’espace pour un pointeur sur le tableau.

Mais dans le code, vous pouvez les manipuler comme des pointeurs tout de même – la seule chose, c’est que vous ne pouvez pas réallouer tab2.

En C, les chaînes de caractères sont représentées par des tableaux de type char.

char *tab = "Hello";

Vous déclarez un pointeur qui pointe sur une chaîne de caractères stockée quelque part dans votre programme (la modification de cette chaîne est un comportement non défini) selon le langage de programmation C.

char tab2[] = "Hello";

Vous déclarez un tableau de char initialisé avec la chaîne « Hello » en laissant au compilateur le travail de compter la taille du tableau.

char tab3[5] = "Hello";

Vous déclarez un tableau de taille 5 et l’initialisez avec « Hello ». C’est une erreur car « Hello » ne tient pas dans 5 éléments.

char tab3[6] = "Hello"; est la déclaration correcte (\0 est le caractère de fin de chaîne en c).

Le premier tab1 est un pointeur (il peut être réaffecté à une adresse différente), les deux autres sont déclarés comme des tableaux, et ne peuvent pas être réaffectés à des emplacements mémoire différents (mais leur contenu peut changer, utilisez const pour éviter cela).

Ca pourrait vous aider à avoir une idée générale comment déclarrer, initaialiser, remplir et afficher un tableau de chaine de caractère en C.

char tab3[5] = "Hello"; signifie que vous prédéfinissez la taille du tableau pour qu’il ne contienne pas plus de 5 éléments. Notez que, pour les chaînes de caractères, la valeur nulle « \0 » est également considérée comme un élément. Ainsi, cette déclaration donnerait un message d’erreur puisque le nombre d’éléments est de 7, donc il devrait être :

char tab3[6]= "Hello";