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 -
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
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
A voir également:
- Initialisation char **
- Coco char - Accueil - Réseaux sociaux
- Échec de l’initialisation de l’inscription du certificat scep - Forum Windows 10
- L'initialisation du rockstar games launcher a échoué - Forum Jeux PC
- Echec de l'initialisation du processus de connexion interactive - Forum Windows 7
- Problème Rockstar Games Launcher - Erreur 3000.108 ✓ - Forum Jeux PC
11 réponses
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
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
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.
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
#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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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)
(c'est peut être très nul comme question mais je trouve sa bizar)
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.
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.....
tu t'embêtes pour rien pour qu'un variable soi disponible pour tout le monde , tu la met en varibla globale
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
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
huhu je sens que je t'ais été d'une grande aide.....
Si tu as d'autre question ne me demande pas :-)
bye
Si tu as d'autre question ne me demande pas :-)
bye
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 :
alors que t'as fonction est censée renvoyer un char*?
Avis aux experts.
Mich
-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