IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Tableaux en C


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 32
    Par défaut Tableaux en C
    Bonjour,

    je veux créer plusieurs tableaux de chaine de caractères en même temps
    est ce que je peux le faire par une boucle for??

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Creer un tableau : le declarer, ou bien le remplir ?

    Si tu as deja du code, poste-le, afin que nous comprenions mieux ce que tu veux faire.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 32
    Par défaut
    merci pour votre réponse
    bon je veux créer un tableau ensuite le remplir , bon plutôt des tableaux
    j'ai une ligne de texte (que j'ai lu à partir d'un fichier et stocké dans une chaine de caractères) cette ligne contient des champs séparés par des ","
    à chaque fois que je trouve un "," je dois créer un tableau et dans lequel je stocke la chaine (celle avant le ",") dans ce tableau

    bon j'ai fais ce code mais je ne pense pas que c'est vraiment efficace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     for (i=0; i<n; i++) 
       { 
          do
         {
          le = strcspn(line_aux, ","); // le contient la longeur du segment intial de line_aux ne contenant pas ","
          strncpy (field, line_aux, le); // field va contenir le 1er champs
     
         // création de la colonne
         char ** Col;
         Col= calloc(1, sizeof(char *));
                 if (Col == NULL) 
    	     {
    	       printf("ERROR!!! l'allocation de la mémoire pour le tableau est erronée");
    	     }
     
    	     Col[0] = malloc (le* sizeof(char));
     
    	     if (Col[0] == NULL) 
    	     {
    	       printf("ERROR!!! l'allocation de la mémoire pour le champs est erronée!!");
    	     }
    	     strncpy (Col[0], field, le); // charger le 1er champs contenu dans field dans la 1ére ligne du tableau
    	     strcpy(Col[0],"\0");
    	     line_aux = line_aux + le + 2; 
    	} 
        while (line_aux = "\0"); // la séparation de la ligne est finie lorsqu'on rencontre le caractère de fin de chaine
      }

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 32
    Par défaut
    bonjour
    j'ai une déclaration d'un typedef d'une pile comme suit:

    typedef struct pile {
    char * contenu;
    struct pile * prec;
    } pile;

    je veux utiliser un tableaux de piles. je l'ai déclaré ainsi:

    pile *TAB[nb_lines];

    maintenant je vais utiliser une fonction qui va retourner un tableau de piles. comment j'écris le type de son retour? est ce ainsi que je peux le faire??

    pile *TAB[] File_Sep (const char* filename);

    vous remerciant,

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    je veux utiliser un tableaux de piles. je l'ai déclaré ainsi:

    pile *TAB[nb_lines];
    Ce n'est pas un tableau de pile mais un tableau de pointeurs sur pile. Un tableau de pile est
    maintenant je vais utiliser une fonction qui va retourner un tableau de piles.
    Une fonction ne peut pas retourner un tableau. Elle peut par contre retourner l'adresse du premier élément du tableau.

    Dans ce cas, on a pour un tableau de pile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pile *File_Sep (const char* filename);
    Si le tableau est un tableau de pointeurs sur pile, on aura
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pile **File_Sep (const char* filename);

    Attention, le tableau dont on retourne l'adresse du premier élément doit être alloué statiquement (par static ou comme variable globale) ou alloué dynamiquement dans la fonction File_Sep().

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 32
    Par défaut
    Je vous remeeeeeeeeeeeeeeeercie.
    très gentil

  7. #7
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 32
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    static pile *File_Sep (const char* filename)
    {
     char *temp;
     temp = File_copy(filename);
     int NL,NF;
     NL = line_count (temp);
     NF = field_count (temp);
     FILE *file_in; // stream associé à temp
     
     /* Nous allons mettre chaque ligne dans une variable de type char* et nous allons séparer les champs de cette ligne */
     
     pile TAB[NL]; /* TAB est un tableau de pile càd chaque case i de TAB va contenir la pile qui contient les champs de la ligne i du fichier  */
     int i =0;
     char * line_in;
     line_in = "";
     long int L=0;  /* la variable L va contenir la taille déjà lue du fichier */
     file_in = fopen (temp, "r");
     
     for (i=0; i<NL, i++)
     {
      while ((c=getc(file_in)) != EOF)
     {
        while ((c=getc(file_in)) != "\n") 
       {
          printf("nous allons copier la ligne n°: \n", i);
          fgets (line_in, MAX_LINE_LEN, temp);  
       } 
        L = L + strlen(line_in);
        fseek (file_in, L, SEEK_SET); /* pour s'assurer toujours que l'on est dans la ligne qui suit la ligne déjà lue */
        printf(" nous sommes dans la ligne n°: \n", i+1);
        TAB[i]=Sep_Line (line_in); 
        c=getc(file_in);
     
      } 
     
      return (TAB);
     
    }
    est ce que l'allocation de TAB ici est bien faite??

  8. #8
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Non, TAB est alors un tableau local à la fonction, donc en allocation automatique. Par conséquent, le tableau est détruit en sortie de la fonction.

    Il faut procéder par allocation dynamique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    static pile *File_Sep (const char* filename)
    {
    ....
       pile * TAB = malloc(NL*sizeof(pile));
       if(TAB != NULL)
      {
       // le tableau est créé : on peut l'utiliser normalement
       .....
      }
      return TAB;
    }
    Ne pas oublier de faire un free() lorsqu'on n'en aura plus besoin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    pile * p =  File_Sep (filename);
    if(p != NULL)
    { 
       //utiliser les éléments du tableau : p[i] 
    .....
       // on n'en a plus besoin
      free(p);
    }
    ....

  9. #9
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 32
    Par défaut
    Merci encore une fois

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/08/2003, 18h04
  2. free sur des tableaux "a moitié dynamiques"
    Par barthelv dans le forum C
    Réponses: 4
    Dernier message: 31/07/2003, 15h30
  3. [langage] erreurs utilisation tableaux 2 dimensions
    Par drosof dans le forum Langage
    Réponses: 11
    Dernier message: 01/07/2003, 11h44
  4. Réponses: 6
    Dernier message: 04/04/2003, 15h28
  5. Les tableaux en PL/SQL
    Par GRUMLY dans le forum PL/SQL
    Réponses: 5
    Dernier message: 12/08/2002, 18h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo