Tableau de chaine de caractère

Résolu
delaktn Messages postés 5 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 24 décembre 2010 - 13 juin 2009 à 23:57
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 14 juin 2009 à 12:47
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

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
14 juin 2009 à 10:28
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.
3
delaktn Messages postés 5 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 24 décembre 2010
14 juin 2009 à 12:06
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;
}
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
14 juin 2009 à 12:39
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;
}
0
delaktn Messages postés 5 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 24 décembre 2010
14 juin 2009 à 12:46
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"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
14 juin 2009 à 12:47
Ha c'est pour cela !
Tu peux les recoder, ce n'est pas très compliqué.
0
Rejoignez-nous