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 :

Probleme utilisation memcpy


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 29
    Par défaut Probleme utilisation memcpy
    Bonjour


    Je souhaite trier un tableau à trois dimensions : c'est un tableau contenant des tableaux de 3 chaines de 10 caracteres(nom, prenom, taille).

    Le tableau est créé dynamiquement à coups de mallocs et il tourne très bien (à l'affichage comme à l'utilisation).

    Le probleme est que dans mon algorithme de tri, je doit utiliser une ligne intermediaire, je la declare donc ainsi :
    Plus loin j'essaye de sauvegarder une ligne de mon tableau dans la ligne intermediaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    memcpy(ligne,tab[j],10);
    La, pas d'erreur de compilation ni d'execution mais un resultat incoherent :
    si j'essaye d'afficher le nom contenu dans cette ligne, rien ne s'affiche
    alors que si je l'affiche a partir du tableau ca marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%s",tab[j][0]);
    Donc deja, c'est louche...
    Le truc c'est qu'un peu plus loin, j'utilise cette ligne intermediaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memcpy(tab[k+1],ligne,10);
    Et lors de l'affichage, j'ai une chaine conforme... mais pas la bonne (alors que plus haut, rien ne s'affichait )

    Merci de m'eclairer.

  2. #2
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Le début est bon ...

    Citation Envoyé par gwendy
    Plus loin j'essaye de sauvegarder une ligne de mon tableau dans la ligne intermediaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    memcpy(ligne,tab[j],10);
    C'est là ou ça coince.
    En effet ta ligne est définie comme ça :
    Ce qui veut dire que ligne est un tableau de tableau de char. Donc en mémoire cela ressemble à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ligne -> ligne[0] ligne[1] ligne[2]
                  ^         ^       ^
                  |         |       |
                 char0   char0    char0
                 char1   char1    char1
                 ...        ...         ...
    Donc quand tu fait ton memcpy dans ligne, c'est les pointeurs ligne[0], ligne[1] et ligne[2] que tu écrase ; alors que ce que tu veux c'est recopier dans char0, char1, ....

    Pour ça, cela s'écrit comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memcpy(ligne[0], tab[j], 10);
    Encore que, comme tu ne nous a pas donné la définition de "tab", je suis pas si sur que ça.

  3. #3
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 29
    Par défaut
    Bonjour

    Enfait j'extrait mes données d'un fichier (une ligne = nom prenom taille) à l'aide du code suivant (le tableau ext inspiré d'un topic trouvé un peu plus bas sur ce forum)
    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
     
    char ***tab;
    char linge[3][10];
    tab = (char***)malloc(sizeof(char**));
             if (tab == NULL)
             {
                  printf("Allocation impossible \n");
                  exit(1);
             }
             printf("\n\nEntrez le nom de fichier :");
             scanf("%s", &nomfichier);
             fichier = fopen (nomfichier, "r");
             if (fichier==NULL)
             {
                               printf("Ce fichier n'existe pas");
             }
             else
             {
                 i=0;
                 while (!feof(fichier))
                 {
                       fscanf(fichier,"%s %s %s", nom, prenom, &taille);
                           tab[i] = (char**)malloc(sizeof(char*)*3);
                           for (j=0;j<3;j++)
                           {
                            tab[i][j] = (char*)malloc(sizeof(char)*10);
                           }
                           memcpy(tab[i][0],nom,10);  
                           memcpy(tab[i][1],prenom,10); 
                           memcpy(tab[i][2],taille,10);   
                           i++;
                 }
                fclose(fichier);
    (...)
    Donc voila, je voit vraiment pas ou est l'erreur

  4. #4
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Je veux pas être méchant, mais apprend à programmer au lieu de t'appuyer éternellement sur les autres !

    Tu as une incohérence entre la déclaration de tes tableaux et leur utilisations, tu à inversé les coordonnées de la dimension 1 et dimension 2.

Discussions similaires

  1. [DLL]Probleme utilisation DLL
    Par bubulle63 dans le forum Windows
    Réponses: 4
    Dernier message: 07/09/2006, 13h35
  2. probleme utilisation fonction split
    Par Lnmex dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 04/07/2006, 16h40
  3. probleme utilisation de iis
    Par seb833434 dans le forum IIS
    Réponses: 2
    Dernier message: 15/06/2006, 17h19
  4. probleme avec memcpy
    Par Jeane dans le forum C++
    Réponses: 4
    Dernier message: 06/06/2006, 14h50
  5. Probleme utilisation d'Objets managé grace a gcroot
    Par pepefourras dans le forum MFC
    Réponses: 4
    Dernier message: 16/05/2006, 00h26

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