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 :

Ecrire une fonction qui lit un tableau puis le stocke ailleurs ..


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut Ecrire une fonction qui lit un tableau puis le stocke ailleurs ..
    Bonjour,

    J'ai des tableaux char d'une longueur assez importante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char test1[200];
    char test2[200];
    char test3[200];
    Je cherche à créer une fonction qui me permettrait de lire le contenu d'un tableau ( en l'appelant dans la fonction par son nom ) puis de copier son contenu dans une mémoire eeprom.

    Les fonctions d'écriture dans l'eeprom existent déja et celles ci fonctionnent bien : ( déja testées )

    XE2BeginWrite(EEPROM_CONTROL, address_start);
    Permet de préparer l'eeprom à écrire des bits à partir d'une adresse donnée. ( à spécifier par l'utilisateur )

    XE2Write;
    Ecrit un bit dans l'eeprom

    XE2EndWrite();
    Termine l'ecriture dans l'eeprom



    Je voudrai pouvoir utiliser ma fonction comme ceci
    :

    Eeprom2_store_table(test1, 0x000000);
    ou encore :
    Eeprom2_store_table(test2, 0x001000);

    La fonction Eeprom2_store_table lirait tout le contenu du tableau dont le nom est indiqué, puis et copierait chacun de ses bits dans l'eeprom à partir de l'adresse spécifiée.


    J'ai donc créé la fonction suivante, mais mon compilateur m'indique des erreurs que je ne sais pas résoudre :

    Error [1505] redeclaration of 'table'
    Comment puis faire pour indiquer à la fonction qu'elle doit attendre ici un nom de tableau ?

    Warning [2054] suspicious pointer conversion
    Cette ligne pose pb : je voudrai lire chaque bit du tableau appelé par la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(i = 0; i < strlen(table); ++i)
    Error [1129] [] operator requires a pointer and an integer as operands
    Je ne sais pas comment spécifier correctement le pointer

    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
    static void Eeprom2_store_table(char table, LWORD address_start)
     
    {
        char table;
    	BYTE i, *p;
    	p = (BYTE*)&table;
     
     
    	XE2BeginWrite(EEPROM_CONTROL, address_start);
     
        for(i = 0; i < strlen(table); ++i)
    		{
        	XE2Write(table[*p++]);
        	}
        	XE2EndWrite();
    }

    Pourriez vous m'aider en me corrigeant svp ?
    Je vous remercie beaucoup,

  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 : 48
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Le prototype est à l'origine des tes problèmes d'ailleurs cela m'étonne que tu ne l'as pas remarqué, tu as fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static void Eeprom2_store_table(char table, LWORD address_start)
    Dans ce prototype tu ne déclares pas un tableau de char mais un char tout court, ceci serait plus juste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static void Eeprom2_store_table(char * table, LWORD address_start)
    Et si ta fonction ne modifie pas le tableau passé en argument :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static void Eeprom2_store_table(const char * table, LWORD address_start)
    De plus, dans la fonction il faut supprimer la déclaration de table car ceci est la source de ton premier problème :

    Error [1505] redeclaration of 'table'
    Tu utilises le même identifiant que celui qui se trouve en argument, il y a donc tentative de redéfinition de la variable, catégoriquement refusé par le compilateur !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut
    Merci beaucoup,


    Si à présent je cherche à stocker un tableau int , pouvez vous me dire ce que je dois modifier dans ma fonction ?

    En procédant ainsi j'obtiens un Warning lors de la compilation :

    Warning [2054] suspicious pointer conversion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(i = 0; i < strlen(table); ++i)

    Fonction modifié pour un tableau int :

    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
    static void int_table2eeprom (int * table, LWORD address_start)
     
    {
        BYTE i, *p;
    	p = (BYTE*)&table;
     
     
    	XE2BeginWrite(EEPROM_CONTROL, address_start);
     
        for(i = 0; i < strlen(table); ++i)
    		{
        	XE2Write(table[*p++]);
        	}
        	XE2EndWrite();
    }

  4. #4
    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
    strlen ne marche que pour des tableaux de char terminé par 0 (chaines de caractères), pas pour des tableaux de int.

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut
    si j'ecris cela, est-ce correct ?

    ( utilisation de sizeof )


    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
    static void intTable2Eeprom (const int * table, LWORD address_start)
     
    {
        BYTE i, *p;
    	p = (BYTE*)&table;
     
     
    	XE2BeginWrite(EEPROM_CONTROL, address_start);
     
        for(i = 0; i < sizeof(table); ++i)
    		{
        	XE2Write(table[*p++]);
        	}
        	XE2EndWrite();
    }

  6. #6
    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.

    sizeof(table) donnera le nombre de bytes de table qui est un pointeur (donc sans doute 4) et non pas le nombre de bytes du tableau.

    Si tu en a besoin, il faut passer cette information en paramètre à la fonction (à moins que la fin du tableau soit inscrite d'une manière ou d'une autre dans le tableau comme c'est le cas pour les chaines de caractères avec le '\0')

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/12/2007, 13h38
  2. Une fonction qui retourne un tableau
    Par DooSquare dans le forum C
    Réponses: 18
    Dernier message: 04/07/2007, 20h15
  3. Comment créer une fonction qui retourne un tableau?
    Par Dereck07 dans le forum Delphi
    Réponses: 4
    Dernier message: 26/04/2007, 13h16
  4. Comment faire une fonction qui renvoi un tableau.
    Par poly128 dans le forum Delphi
    Réponses: 2
    Dernier message: 01/06/2006, 01h04
  5. Réponses: 15
    Dernier message: 15/12/2005, 14h36

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