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 :

copie de tableaux


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut copie de tableaux
    Bonjour. Je voudrai savoir si cette fonction destinée à copier deux tableaux est juste. Le tableau 1 tab1 est copié dans le tableau 2 tab2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void copie_tab(short* tab1, short* tab2)
    	{
    	int i,nbr_iter;
    	nbr_iter=sizeof(tab1)/sizeof(short);
    	for(i=0;i<nbr_iter;i++)
    		{
    		*(tab2+i)=*(tab1+i);//doit-on et peut-on remplacer par tab2[i]=tab1[i] ?
    		}
    	}

  2. #2
    Membre chevronné Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Par défaut
    Salut,
    Non: nbr_iter ne contient pas la bonne valeur. Mettre i<=nbr_iter arrange le coup.
    Et cette fonction suppose que l'espace est déjà réservé pour tab2.

    J'ai eu l' idée de vérifier
    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
    #include <stdio.h>
     
    void copie_tab(short* tab1, short* tab2)
    {
     int i,nb;
     nb = sizeof(tab1) / sizeof(short);
     printf("%d éléments\n", nb);
     for(i=0; i<=nb; i++)
     {
      tab2[i]=tab1[i];
      //*(tab2+i)=*(tab1+i);//doit-on et peut-on remplacer par tab2[i]=tab1[i] ?
     }
    }
     
    int main (void)
    {
     short a[3]={25,12,3};
     short b[3];
     int n;
     
     copie_tab(a,b);
     
     for (n=0; n<3; n++)
      printf("%d\t%d\n", a[n], b[n]);
     
      return 0;
    }

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut
    /*Euh je ne crois pas que nbr_iter ne soit pas la bonne valeur. D'après le code qui est écrit, i va prendre les caleurs de 0 à nb, nb comp le tableau compris, ce qui fait nb+1 valeurs alors que le tableau comporte nb cases.*/

    En fait la sortie de ce programme est bizarre chez moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ./test
    2 éléments
    25      25
    C'est vraiment bizarre la boucle for ne fait pas sont travail. Quand je modifie la taille des tableaux de trois à 6, j'ai toujours deux éléments.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nb = sizeof(tab1) / sizeof(short);
    n'est pas bon ?

  4. #4
    Membre chevronné Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Par défaut
    Bizarre. On est d' accord que le tableau initial compte 3 éléments.

    Plus simple encore: en évitant le sizeof ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     while(a[n]) 
     {
      b[n]=a[n];
      n++;
     }
    Mais dans ce cas il faut initialiser n à 0.

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par kromartien
    Bonjour. Je voudrai savoir si cette fonction destinée à copier deux tableaux est juste. Le tableau 1 tab1 est copié dans le tableau 2 tab2.
    Non. Il faut passer la dimension explicitement. Celle-ci doit être valide pour les 2 tableaux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	nbr_iter=sizeof(tab1)/sizeof(short);
    ne fonctionne qu'avec des tableaux, pas avec des pointeurs. Rappel :

    http://emmanuel-delahaye.developpez.....htm#param_tab

    Utilise memcpy(), ce sera plus simple...

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut
    OK oui j'ai réalisé mettre un pointeur dans un sizeof n'a pas beaucoup de sens. Merci pour memcpy();

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

Discussions similaires

  1. copie de tableaux de Word vers Excel plante si gros fichiers
    Par Patnel dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/03/2011, 15h50
  2. [XL-2003] Copie de tableaux d'une feuille vers d'autres
    Par Spydermonkey dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/12/2010, 02h07
  3. [XL-2007] Créer une boucle pour copie des tableaux de plusieurs feuilles sur une seule
    Par rvtoulon dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 22/09/2009, 17h12
  4. Copie de tableaux contenant des signets
    Par ze_Mirouf dans le forum VBA Word
    Réponses: 4
    Dernier message: 18/07/2009, 00h45
  5. D7 - Copy et tableaux dynamiques
    Par RamDevTeam dans le forum Langage
    Réponses: 2
    Dernier message: 15/08/2005, 13h46

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