Initialisation char **

Résolu
sophieeeeee Messages postés 1396 Date d'inscription   Statut Membre Dernière intervention   -  
mich62120 Messages postés 636 Statut Membre -
Bonjour,
voila mon code:

char **MesMes;
char ** Mess;

MesMes=Mess;

jusque la tout devrais bien allé mais ca me met une erreur a la compilation: initializer is not a constant.

Mais pourquoi donc????Merci de votre aide
Configuration: Windows Vista
Internet Explorer 7.0

11 réponses

  1. mich62120 Messages postés 636 Statut Membre 6
     
    salut,

    Aucun de tes deux pointeur ne pointe sur quelque chose donc il ne peut pas dire MesMes=Mess puisaque il ne sait pas à quoi correspond Mess.
    Il faut que tu fasse ton initialisation qu'après avoir donner "le contenu" de Mess et la il saura ce qu"il doit faire avec MesMes.
    Désolé si ce n'est pas très clair.

    Mich
    0
  2. sophieeeeee Messages postés 1396 Date d'inscription   Statut Membre Dernière intervention   53
     
    Mais le contenu de Mess est donné dans un autre fichier.c et dans le fichier ou je veux faire MesMes=Mess j'ai bien défini le point h.
    0
  3. kill4m Messages postés 260 Statut Membre 26
     
    salut
    Montre ton .h et l'autre .c
    0
  4. sophieeeeee Messages postés 1396 Date d'inscription   Statut Membre Dernière intervention   53
     
    mes_fr.c

    #include <fcntl.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include "msg.h"
    #include "mes_fr.h"

    char ** MesMes
    # ifndef Mesdflt
    = Mess
    #endif
    ;

    mes_fr.h:

    char **MesMes;

    msg.c:

    #include <io.h>
    #include <fcntl.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include "msg.h"

    #define _WIN32_

    void MessInit(void)
    {
    #define Mesdflt 1
    MessSpecInit();

    }

    #if defined (_WIN32_)|| defined (_LINUX_)
    char * MessSpecInit(void)
    {
    int f,i,h=0,j=0,k=0,l=0;
    int nbString =0;
    int strencours=0;
    char * buffer;

    struct stat buf;

    f =_open("c:/essai.txt", _O_RDONLY,_S_IREAD );
    if (f == -1)
    {
    perror( "ouverture du fichier impossible\n" );
    }

    if(-1==stat("c:/essai.txt",&buf))
    {
    return(0);
    }

    buffer= malloc(buf.st_size);
    if( buffer ==NULL)
    {
    printf ("pas assez de memoire\n");
    }

    j=_read(f,buffer,buf.st_size);
    if (j<= 0)
    {
    printf("erreur lecture\n");
    }

    for (i=0;i<buf.st_size;i++)
    {

    if(buffer[i]=='"')
    {
    if (strencours==0)
    {
    strencours=1;
    }
    else
    {
    nbString ++;
    strencours=0;
    }
    }

    }
    printf("il y a %d chaine en cours\n",nbString);
    Mess=calloc(nbString,sizeof(char*));
    if(Mess==NULL)
    {
    printf("impossible de creer le tableau\n");
    }

    strencours =0;
    for (i=0;i<buf.st_size;i++)
    {
    if(buffer[i]=='"')
    {
    if(strencours==1)
    {
    buffer[i]='\0';
    strencours=0;

    }
    else
    {
    Mess[h]=&buffer[i+1];
    strencours=1;
    h++;
    }
    }
    }
    for (h=0;h<nbString;h++)
    {
    printf("la chaine a l'emplacement %d est: %s \n",h,Mess[h]);
    }
    return *Mess;
    }
    #endif

    #if defined (_MOS_) || defined (_MTK_)
    int MessSpecInit(void)
    {
    #define Mesdflt 1
    }
    #endif

    msg.h:

    #ifndef __MSG_H
    #define __MSG_H

    #ifdef __cplusplus
    extern "C" {
    #endif

    char * MessSpecInit(void);
    void MessInit(void);
    char ** Mess;

    #ifdef __cplusplus
    };
    #endif

    #endif
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. kill4m Messages postés 260 Statut Membre 26
     
    pourquoi MesMes est définit à la fois dans le .c et dans le .h ???

    (c'est peut être très nul comme question mais je trouve sa bizar)
    0
  7. sophieeeeee Messages postés 1396 Date d'inscription   Statut Membre Dernière intervention   53
     
    il est défini dans le point h pour que les autres puisse s'en servir et dasn le point c pour m'en servir dans le point C.
    0
  8. kill4m Messages postés 260 Statut Membre 26
     
    Me trompe peut être mais sa fais qu'il est définit 2x dans le .c et que tu n'inclue pas le .h dans les autres donc il ne sert pas aux autres.....
    0
  9. kazouu Messages postés 466 Statut Membre 12
     
    tu t'embêtes pour rien pour qu'un variable soi disponible pour tout le monde , tu la met en varibla globale
    0
  10. sophieeeeee Messages postés 1396 Date d'inscription   Statut Membre Dernière intervention   53
     
    tien voici mon code corriger qui marche si ca t'interresse:
    mes_fr.h:
    extern char **MesMes;
    char ** MesMes;

    message.h:
    #ifdef __cplusplus
    extern "C" {
    #endif
    char * GetMesMes(int Num);
    #ifdef __cplusplus
    };
    #endif

    message.c:
    #include "message.h"
    #include "mes_fr.h"
    #include "msg.h"

    char * GetMesMes(int Num)
    {
    return (MesMes[Num]);
    }

    msg.c:

    void MessInit(void)
    {
    MessSpecInit();
    #ifndef Mesdflt
    MesMes= Mess;
    #endif

    }........
    et voila
    0
  11. kill4m Messages postés 260 Statut Membre 26
     
    huhu je sens que je t'ais été d'une grande aide.....
    Si tu as d'autre question ne me demande pas :-)
    bye
    0
  12. mich62120 Messages postés 636 Statut Membre 6
     
    Je risque fortement de dire un tas de conneries dans les lignes qui suivent mais je me lance on sait jamais, au pire on me corrigera et je dormirai moins bête ce soir. :)

    -Je ne sais pas si tu peux faire la double déclarations mais c'est vrai que ça me semble bizarre.Mais je ne pense pas que l'erreur serait celle là.

    -Est ce que ca pourrai pas venir que tu renvoie 0 :

    if(-1==stat("c:/essai.txt",&buf)) 
    { 
    return(0); 
    } 


    alors que t'as fonction est censée renvoyer un char*?

    Avis aux experts.

    Mich
    0
    1. mich62120 Messages postés 636 Statut Membre 6
       
      Eh ben nan !!!:DDDD
      0