Initialisation char **

Résolu
sophieeeeee Messages postés 1396 Date d'inscription   Statut Membre Dernière intervention   -  
mich62120 Messages postés 631 Date d'inscription   Statut Membre Dernière intervention   -
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

11 réponses

mich62120 Messages postés 631 Date d'inscription   Statut Membre Dernière intervention   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
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
kill4m Messages postés 224 Date d'inscription   Statut Membre Dernière intervention   26
 
salut
Montre ton .h et l'autre .c
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kill4m Messages postés 224 Date d'inscription   Statut Membre Dernière intervention   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
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
kill4m Messages postés 224 Date d'inscription   Statut Membre Dernière intervention   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
kazouu Messages postés 466 Date d'inscription   Statut Membre Dernière intervention   12
 
tu t'embêtes pour rien pour qu'un variable soi disponible pour tout le monde , tu la met en varibla globale
0
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
kill4m Messages postés 224 Date d'inscription   Statut Membre Dernière intervention   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
mich62120 Messages postés 631 Date d'inscription   Statut Membre Dernière intervention   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
mich62120 Messages postés 631 Date d'inscription   Statut Membre Dernière intervention   6
 
Eh ben nan !!!:DDDD
0