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 :

comment affecter un tableau a un autre tableau?


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut comment affecter un tableau a un autre tableau?
    bonjour,
    comment faire pour affecter un tableau à un autre tableau?
    car j'ai fais un programme pour afficher la temperature sur un afficheur graphique, j'ai réaliser une font pour pouvoir juste modifier 1/4 de l'ecran, a l'endroit ou ce trouve la partie temperature qui varie
    voila une ligne de mon programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GLCD_write_data(1,i<8?val_temp_x[j+(i-4)*64]:0x00);
    donc ce qui vari c'est le tableau val_temp_x car chaque fois que la temperature change le tableau change ex pour 1° on aura val_temp_1
    merci

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Un memcpy devrait faire l'affaire Enfin si c'est bien une copie d'un tableau A dans un tableau B que tu veux

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Franck.H
    Un memcpy devrait faire l'affaire Enfin si c'est bien une copie d'un tableau A dans un tableau B que tu veux
    merci pour l'information mais le souci c'est que j'arrive pas a faire fonctionner le memcpy je tape la ligne de commande suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void *memcpy(void *tab1[], CONST void *temp_1[], size_t 256);
    et sa me mais sa comme erreure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ./main.c
    !E ./main.c(163): syntax error; found `256' expecting `)'
    !E ./main.c(163): skipping `256'
    !E ./main.c(163): redeclaration of `memcpy' previously declared at C:/PROGRA~1/CYPRES~1/PSOCDE~1/tools/include/string.h(27)
     
    C:\PROGRA~1\CYPRES~1\PSOCDE~1\tools\make: *** [obj/main.o] Error 1
     
    lcd_adc - 4 error(s) 0 warning(s) 13:41:23

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par eric47
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void *memcpy(void *tab1[], CONST void *temp_1[], size_t 256);
    Et depuis quand on passe des arguments et on utilise des fonctions de cette manière ? Ton tableau est de quel type ?

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Voici un exemple très basique:
    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 <stdlib.h>
    #include <stdio.h>
    #include <string.h>
     
     
    int main (void)
    {
       int i = 0;
       int tab1 [] = { 1, 2, 3, 4, 5 };
       int tab2 [5];
     
     
       memcpy (tab2, tab1, 5 * sizeof (int));
     
       for (i = 0; i < 5; i++)
          printf ("%d ", tab1[i]);
     
       printf ("\n");
     
       for (i = 0; i < 5; i++)
          printf ("%d ", tab2[i]);
     
       printf ("\n");
     
     
       return EXIT_SUCCESS;
    }

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Franck.H
    Et depuis quand on passe des arguments et on utilise des fonctions de cette manière ? Ton tableau est de quel type ?
    desolé je suis pas tres doué avec language C

    ce sont des char

    const char tab1[];

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par eric47
    ce sont des char

    const char tab1[];
    Il te suffit de faire comme dans mon exemple, sauf pour le sizeof, inutile dans ce cas car un char vaut 1

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Franck.H
    Il te suffit de faire comme dans mon exemple, sauf pour le sizeof, inutile dans ce cas car un char vaut 1


    je comprens pas sa me met toujours des erreures
    j'ai mis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memcpy (tab1, toto, 256 * sizeof (char));
    et les erreurs sont les suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Linking..
    want size 2
    lo 255 hi 255 size 1
    !E <command line switches>(1222): area 'data' not large enough
    want size 1
    lo 256 hi 255 size 0
    !E <command line switches>(1222): area 'virtual_registers' not large enough
    want size 1
    lo 256 hi 255 size 0
    !E <command line switches>(1222): area 'virtual_registers' not large enough
    want size 1
    lo 256 hi 255 size 0
    !E <command line switches>(1222): area 'virtual_registers' not large enough
    C:\PROGRA~1\CYPRES~1\PSOCDE~1\tools\make: *** [output/lcd_adc.rom] Error 1
    merci de votre aide
    y a pas d'autre facon de copier un tableau?

  9. #9
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par eric47


    je comprens pas sa me met toujours des erreures
    j'ai mis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memcpy (tab1, toto, 256 * sizeof (char));
    J'ai encore dit qu'avec le type char le sizeof n'était pas nécessaire ... faut lire un peu mieux

    Montre moi comment sont créés les deux tableaux !

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Franck.H
    J'ai encore dit qu'avec le type char le sizeof n'était pas nécessaire ... faut lire un peu mieux

    Montre moi comment sont créés les deux tableaux !

    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
    char toto[]={
     
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,//LCD page 4
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0,
    0, 0x80, 0x40, 0x20, 0x10, 0x08, 0xFC, 0, 0,
     
    0, 0, 0x08, 0x14, 0x88, 0x40, 0x40, 0x40, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,//LCD page 5
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x40, 0x40, 0x7F, 0x40, 0x40,
    };
     
    char tab1[];
    voila merci

  11. #11
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Ok, déjà il va falloir que tu passe le type des tableaux en
    car sinon voilà le genre d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /home/franhec/Documents/Programmation/CodesTests/ANSI/App/main.c:16: attention : débordement dans la conversion implicte de la constante
    /home/franhec/Documents/Programmation/CodesTests/ANSI/App/main.c:16: attention : débordement dans la conversion implicte de la constante
    /home/franhec/Documents/Programmation/CodesTests/ANSI/App/main.c:18: attention : débordement dans la conversion implicte de la constante
    :: === Build finished: 3 errors, 0 warnings ===
    J'ai vérifié, la taille est bien de 256 donc à part cela je ne vois pas pour le moment d'autres problèmes ! Il existe bien entendu un autre moyen de faire un copie, c'est en faisant une simple boucle for où tu copie un octet à chaque itération du tablea A vers le tableau B !

  12. #12
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par eric47
    Quelle est la taille de tab1 ?

  13. #13
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par crocodilex
    Quelle est la taille de tab1 ?
    Ouais merci, je viens tout juste d'y penser, me disais que j'avais oublié de dire quelque chose Apparement il n'a pas de taille !

    @eric47: Il faut qu'il ai au moins la même taille que le tableau source soit ici 256 minimum ! Va falloir sérieusement réviser ton C

  14. #14
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par Franck.H
    Ouais merci, je viens tout juste d'y penser, me disais que j'avais oublié de dire quelque chose Apparement il n'a pas de taille !

    @eric47: Il faut qu'il ai au moins la même taille que le tableau source soit ici 256 minimum ! Va falloir sérieusement réviser ton C
    A mon avis il ne nous montre pas le code original. Ou bien peut être qu'il a un compilateur exotique.
    Car déclarer un tableau sans indiquer la taille ne doit pas passer à la compilation (hormis à l'initialisation bien entendu).

  15. #15
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par crocodilex
    A mon avis il ne nous montre pas le code original. Ou bien peut être qu'il a un compilateur exotique.
    Car déclarer un tableau sans indiquer la taille ne doit pas passer à la compilation (hormis à l'initialisation bien entendu).
    Oui, même sans réglage avec GCC 4.1 chez moi ca passe pas

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par crocodilex
    A mon avis il ne nous montre pas le code original. Ou bien peut être qu'il a un compilateur exotique.
    Car déclarer un tableau sans indiquer la taille ne doit pas passer à la compilation (hormis à l'initialisation bien entendu).

    que j'indique la taille ou pas sa marche avec le compilateur que j'utilise pourquoi je ne sais pas car je pas fort, en programmation j'utilise mikroelectronika et c'est un micrcontoller de chez cypress.

    mais là j'essaye de copier un tableau car je fais une fonte pour pouvoir afficher les temperatures sur mon afficheur graphique 128*64 dans le cadre de mon stage.

    une question aussi pourquoi quand je m'ai a la compilation il me met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    want size 2
    lo 255 hi 255 size 1
    !E <command line switches>(1192): area 'data' not large enough
    want size 2
    lo 255 hi 255 size 1
    !E <command line switches>(1192): area 'data' not large enough
    want size 2
    lo 255 hi 255 size 1
    !E <command line switches>(1192): area 'data' not large enough
    want size 2
    lo 255 hi 255 size 1
    !E <command line switches>(1192): area 'data' not large enough
    C:\PROGRA~1\CYPRES~1\PSOCDE~1\tools\make: *** [output/lcd_adc.rom] Error 1
    parcontre quand je m'ai
    sa compile correctement

  17. #17
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par eric47
    et les erreurs sont les suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Linking..
    want size 2
    lo 255 hi 255 size 1
    !E <command line switches>(1222): area 'data' not large enough
    want size 1
    lo 256 hi 255 size 0
    !E <command line switches>(1222): area 'virtual_registers' not large enough
    want size 1
    lo 256 hi 255 size 0
    !E <command line switches>(1222): area 'virtual_registers' not large enough
    want size 1
    lo 256 hi 255 size 0
    !E <command line switches>(1222): area 'virtual_registers' not large enough
    C:\PROGRA~1\CYPRES~1\PSOCDE~1\tools\make: *** [output/lcd_adc.rom] Error 1
    A vu de nez, ce ne sont pas des erreurs dans le code, mais des erreurs indiquant que tu prends trop de place par rapport a ce que tu as de disponible dans ta cible.

    Citation Envoyé par eric47
    y a pas d'autre facon de copier un tableau?
    Si, en faisant une boucle et en copiant element par element.

    Mais si les erreurs que tu obtiens sont bien, comme je le pense, des erreurs indiquant un manque de place, la vrai question est plutot, as-tu vraiment besoin des deux tableaux ?

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par gl
    A vu de nez, ce ne sont pas des erreurs dans le code, mais des erreurs indiquant que tu prends trop de place par rapport a ce que tu as de disponible dans ta cible.



    Si, en faisant une boucle et en copiant element par element.

    Mais si les erreurs que tu obtiens sont bien, comme je le pense, des erreurs indiquant un manque de place, la vrai question est plutot, as-tu vraiment besoin des deux tableaux ?
    en faite j'ai fais plusieur tableaux, un pour chaque temperature et maintenant faut que je fasse un petit programme pour que suivant la valeur donné par le CAN le bon tableaux soit selectionner afin d'avoir la bonne temperature qui s'affiche et donc je que le bon tableau selon la temperture soit copier dans le tableau qui se trouve dans la ligne de l'affichageur graphique

    merci

  19. #19
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    bah avec juste un pointeur ça devrait pouvoir se faire sans opérations...

    Mais pour aider plus faudrait juste un peu de code...

  20. #20
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par souviron34
    bah avec juste un pointeur ça devrait pouvoir se faire sans opérations...

    Mais pour aider plus faudrait juste un peu de code...
    oui c'est sa le probleme je suis pas bon en language C...
    je peux te montrer mon programme?

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/02/2021, 10h49
  2. affectation tableau ds un autre tableau
    Par kinenveux dans le forum VBScript
    Réponses: 3
    Dernier message: 19/01/2011, 10h48
  3. [Toutes versions] transformation d'un tableau en un autre tableau
    Par fraid49 dans le forum Excel
    Réponses: 2
    Dernier message: 03/06/2010, 14h24
  4. Réponses: 2
    Dernier message: 04/07/2008, 14h24
  5. création de tableau dans un autre tableau
    Par freestyler dans le forum Delphi
    Réponses: 2
    Dernier message: 02/11/2006, 08h54

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