Afficher les éléments d'un tableau de chaine de caractére en C

J’ai créé une fonction qui prend un pointeur sur le premier élément d’un tableau de chaînes de caractères. Voici le tableau et la façon dont j’ai procédé pour le créer :

char str1[60] = "abc";
char str2[60] = "xyz";
char* tab[10] = {str1,str2};

J’ai ensuite créé un pointeur sur le premier élément du tableau :

char *pTab = &tab[0];

J’ai ensuite passé le pointeur à la fonction que j’ai créée :

void afficherTab(char *pTab){
  int i = 0;
  while (i < 2){
    printf("\n Element is: %s \n", *pTab);
    pTab = pTab + 1;
    i = i+1;
  }
}

Lorsque j’exécute le programme, le tableau ne s’affiche pas.

J’ai déjà fait ce programme en C++, mais j’ai utilisé le type STL string, et j’ai créé un pointeur sur un tableau de chaînes. Je pense que mon problème réside dans la façon dont je procède pour créer un tableau de string en C, et pour créer un pointeur vers ce tableau.

Lorsque printf() est appelé avec %s, il fait plus ou moins ceci

for(i = 0; tab[i] != '\0'; i++)
{
   printf("%c", tab[i]);
}

Ce que vous cherchez à faire, c’est quelque chose comme

for(i = 0; tab[i] != '\0'; i++)
{
   printf("\n Les elements sont: %c", tab[i]);
}

Lorsque vous faites référence à des éléments spécifiques d’un tableau, vous devez utiliser un pointeur ET un index, c’est-à-dire tab[0] dans ce cas, 0 est l’index et ‹ tab › est le pointeur. Les boucles for ci-dessus parcourront l’ensemble du tableau un index à la fois car « i » est l’index et « i » s’incrément à la fin de chaque tour de boucle et la boucle continuera à tourner jusqu’à ce qu’elle atteigne la fin du tableau.

Vous pouvez donc essayer quelque chose comme ceci.

void afficherTab(char *pTab)
{
  for(i = 0; i <= 2; i++)
  {
    printf("\n Les elements sont: %s \n", pTab[i]);
  }
}

Fait cela :

char *pTab = &tab[0];

se compile sans avertissement sur votre compilateur ? Si c’est le cas, votre compilateur est obsolète. Veuillez lire les erreurs et les avertissements qu’il affiche.

&tab[0] est un char**, pas un char*