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 :

Découper char ** en fonction du numéro de ligne


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Collégien
    Inscrit en
    Juillet 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2012
    Messages : 31
    Points : 49
    Points
    49
    Par défaut Découper char ** en fonction du numéro de ligne
    Bonsoir à tous,

    je cherche à découper un char **, c'est à dire, stocker les lignes que je veux dans un autre char **.
    Par exemple, admettons un char **tab qui contiendrait :
    {"aaaaaaaaaaaaaaaaaaaaaaaaaa
    bbbbbbbbbbbbbbbbbbbbbbbbbbb
    ccccccccccccccccccccccccccc
    dddddddddddddddddddddddddd
    ..."};

    je voudrais par exemple récupérer le contenu de la deuxième ligne et la stocker dans un second tableau,
    ou bien stocker dans le deuxième tableau, les lignes 3 jusqu'à 5, ou 1 à 3...
    Pour stocker des lignes 1 à 3, je pensais à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (i = 0; i < 3; i++)
        for (j = 0; j < y; j++)
            tab2[i][j] = tab1[i][j];
    avec y la largeur prédéfini, mais ça ne stock pas char par char comme je le voudrais.
    si quelqu'un a un algo à proposer, je suis preneur
    Merci d'avance,
    Bonne soirée

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Pour copier des chaines de caractères (et non des pointeurs, il faut faire très attention), il faut utiliser strcpy(). Vous pouvez utiliser aussi strdup() qui gèrera l'allocation pour vous, mais n'oubliez pas libérer la mémoire (avec free()).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    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
     
    // fonction qui copie nbLigne à partir de la ligne startLigne du tableau tab
    char** copyTab(int nbLigne, int startLigne, char** tab)
    {
      // Iterateur sur le tableau d'entré
      int it1 = startLigne;
      // Iterateur sur le tableau de sortie
      int it2 = 0;
     
      // Allocation du tableau de sortie
      char** ret = malloc(nbLigne*sizeof(*ret));
      // Si le malloc s'est bien passé et que le tableau d'entré n'est pas nul
      if (ret && tab)
      {
        // tant qu'on a pas copié le bon nombre de ligne
        while (it2 < nbLigne)
        {
          // Si on accède à la fin du tableau d'entré
          if (tab[it1] == 0)
            return (0);
          // Copie d'une ligne du tableau d'entré vers le tableau de sortie
          ret[it2]=strdup(tab[it1]);
          // Incrementation des iterateurs
          it2++;
          it1++;
        }
      }
      return (ret);
    }
    Le seul cas ou cette fonction peut segfaulter, c'est lorsque tu passe un tab qui contient 2 lignes et que tu essaye de copier à partir de la ligne 4.
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  4. #4
    Membre du Club
    Profil pro
    Collégien
    Inscrit en
    Juillet 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2012
    Messages : 31
    Points : 49
    Points
    49
    Par défaut
    Bonsoir,

    Merci à vous deux, et merci skeud pour l'exemple, me reste plus qu'a recoder strdup pour comprendre son fonctionnement.

    Bonne soirée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Insertion de lignes en fonction du numéro de lignes comme variable
    Par Rachi dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 13/12/2012, 11h18
  2. [XL-2003] Copie de cellule en fonction du numéro de lignes
    Par biquet25 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/04/2009, 19h34
  3. Trouver le numéro de ligne d'une fonction
    Par supertoms dans le forum VBA Access
    Réponses: 4
    Dernier message: 28/04/2008, 20h10
  4. numéro de ligne de la case qui effectue la fonction
    Par aurelien80 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 20/12/2007, 18h13
  5. Fonction excel: trouvé un numéro de ligne
    Par Nanid dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 28/09/2005, 14h52

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