Tableau de chaine de caractère

[Résolu]
Signaler
Messages postés
5
Date d'inscription
lundi 22 mai 2006
Statut
Membre
Dernière intervention
24 décembre 2010
-
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
-
salut,

Je réalise une application dont je besoin d'un tableau de chaine de caractère

et voila la déclaration de ce tableau:

char* t[10];

j'ai réalisé une fonction qui permet l'ajout d'une chaine de caractère dans ce tableau:

void add_tab_chaine(char* t[],char* a,int p){

t[p]=a;

}

avec p la position d'insertion de la chaine dans le tableau.

Après insertion des éléments dans le tableau, et lors de l'affichage de
contenue de tableau, l'élément afficher est seul le dernier insérer, et
les autres élément serons écraser,

pouvez vous m'aider pour avoir tous les éléments de tableau sans écrasement et merci.

5 réponses

Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
122
Je ne vois pas où est le problème dans ton code. J'ai fait un test chez moi et tout fonctionne.

#include <stdio.h>

void add_tab_chaine(char* t[], char* a, int p)
{
  t[p] = a;
}

void affiche(char* t[], int taille)
{
  int i = 0;
  for (i = 0; i < taille; ++i)
    printf("%i : "%s"\n", i, t[i]);
}

int main()
{
  char* t[10] = {0};

  char* s1 = "Kikoo";
  char* s2 = "Test";
  char* s3 = "Pouet";

  add_tab_chaine(t, "toto", 0);
  add_tab_chaine(t, s1, 1);
  add_tab_chaine(t, s2, 2);
  add_tab_chaine(t, s3, 3);
  add_tab_chaine(t, "tata", 4);

  affiche(t, 10);

  return 0;
}

Copie colle plus de code, ton problème est peut être ailleurs.
Messages postés
5
Date d'inscription
lundi 22 mai 2006
Statut
Membre
Dernière intervention
24 décembre 2010

merci pour la réponse mais voila mon code tu peut l'exécuter et voir le résultat:
#include <stdio.h>
#include <conio.h>

void add_tab_chaine(char* t[], char* a, int p)
{
  t[p] = a;
}

void affiche(char* t[], int taille)
{
  int i = 0;
  for (i = 0; i < taille; ++i)
    printf("%i : "%s"\n", i, t[i]);
}

int main()
{
  char* t[10] = {0};
  int i=0;    
  char* s1 ;
  while(i<5){
  printf("donner une chaine ");
  gets(s1);
  add_tab_chaine(t,s1,i);
  i++;
  }

  affiche(t, 10);
  getch();
  return 0;
}
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
122
C'est normal. s1 est un pointeur, et t un tableau de pointeur. A chaque appel de gets (préfère scanf d'ailleurs) tu écrases l'adresse de s1 avec la nouvelle chaîne. Il faut donc faire une véritable copie à chaque fois. Révise bien les pointeurs, tu sembles ne pas savoir les maîtriser correctement.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/* #include <conio.h> */

void add_tab_chaine(char* t[], char* a, int p)
{
  t[p] = malloc((strlen(a) + 1) * sizeof (char));
  strcpy(t[p], a);
}

void affiche(char* t[], int taille)
{
  int i = 0;
  for (i = 0; i < taille; ++i)
    printf("%i : "%s"\n", i, t[i]);
}

void free_tab(char* t[], int taille)
{
  int i = 0;
  for (i = 0; i < taille; ++i)
    free(t[i]);
}

int main()
{
  char* t[10] = {0};
  int i = 0;
  char* s1 = NULL;

  s1 = malloc(256 * sizeof (char));
  while(i < 5)
  {
    printf("Donner une chaine : ");
    scanf("%s", s1);
    add_tab_chaine(t, s1, i);
    i++;
  }

  affiche(t, 10);
  free_tab(t, 10);
  free(s1);
  /* getch(); */
  return 0;
}
Messages postés
5
Date d'inscription
lundi 22 mai 2006
Statut
Membre
Dernière intervention
24 décembre 2010

merci de nouveau pour ton réponse mais en réalité je programme un équipement embarqué et j'ai pas les bibliothèque que t'as utilisé  comme "string.h", "stdlib.h"
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
122
Ha c'est pour cela !
Tu peux les recoder, ce n'est pas très compliqué.