begin process at 2012 05 30 16:32:06
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Remplir une structure "globale", comment ???


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Remplir une structure "globale", comment ???

mardi 27 décembre 2005 à 14:43:43 | Remplir une structure "globale", comment ???

julien_boss

Bonjour à tous,

voilà donc j'expose mon problème, si vous voulez bien  :
je crée une structure dans un fichier .h lu par tous les fichiers de mon application :

struct COMPTE {
 char *     nom;
 char *    pass;
 char *   idMd5;
 char *    UNom;
 char * UPrenom;
 char *    UAge;
 char *    UTxt;     
};

static COMPTE SCom;   //dans le même temps, je déclare une structure

Ensuite je rempli la structure SCom dans une classe grâce à une fonction créée ( SCom = fullCOMPTE(); ), seul hic, plutôt gros du moins, je veux que la structure soit globale, donc que les données soient lues partout, hors dés lors que je suis sorti de ma classe, les données n'existent plus, attention, la structure, elle (SCom) est bien reconnue. Comment faire SVP ??
En gros, je cherche à avoir l'équivalent d'une session en PHP

Merci pour votre aide les gens
mardi 27 décembre 2005 à 15:55:50 | Re : Remplir une structure "globale", comment ???

vecchio56

Administrateur CodeS-SourceS
Sans doute parce que tes pointeurs pointent vers des emplacements locaux, qui sont libérés quand tu sors de la fonction. A la sortie, les pointeurs existent toujours mais sont invalides
mardi 27 décembre 2005 à 16:08:10 | Re : Remplir une structure "globale", comment ???

julien_boss

Alors comment faire pour avoir le résultat espéré ? J'avoue ne pas avoir tout compris à ta réponse ...
mardi 27 décembre 2005 à 16:47:51 | Re : Remplir une structure "globale", comment ???

vecchio56

Administrateur CodeS-SourceS
void f()
{
  SCom.nom = "nom";
}

"nom" est allouée sur la pile, donc ca n'est plus correct quand on sort de la fonction. Pour que ca le reste, il faut allouer sur le tas:
SCom.nom = malloc(X); // X = au moins taille de la chaine + 1
strcpy(SCom.nom, "nom");
mardi 27 décembre 2005 à 17:10:57 | Re : Remplir une structure "globale", comment ???

julien_boss

j'ai bien compris là, mais enfaite, je fais ceci :

donc j'ai une classe, la fonction d'une classe : BOOL CInscription::CreateCompte(HWND hdlg, WPARAM wParam, LPARAM lParam)
Dans le fichier .h de cette classe, j'inclue objet.h, qui contient le prototype de ma fonction de remplissage de la structure en question :  COMPTE fullCOMPTE(char*);
dans la classe, je fais : SCom = fullCOMPTE(nomCompte);
et quand je sors de la fonction et que je reste dans la classe, je teste les valeurs de ma structure avec MessageBox(hwnd, SCom.nom, SCom.pass,MB_OK);

là, ca marche, donc c'est la preuve qu'une fois sorti de la fonction, les valeurs sont bonnes et utilisables

prototype de ma fonction :


COMPTE fullCOMPTE(char * Nom)
{
 COMPTE * p = new COMPTE;
 
 MYSQL * m;
 
 if((m = mysql_init(NULL)) != NULL && mysql_real_connect(m,SCon.host,SCon.login,SCon.pass,SCon.db,MYSQL_PORT,NULL,0)!=NULL)
  {
 
   MYSQL_RES * result;
   MYSQL_ROW eC;
   char mM[300];
 
   wsprintf(mM,"SELECT * FROM comptes WHERE nameCompte='%s'",Nom);
   if(mysql_query(m,mM) == 0)
   {
   
    result = mysql_store_result(m);
 
    if(result != NULL)
    {
    
     eC = mysql_fetch_row(result);
  
     p->nom =     eC[1];
     p->pass =    eC[2];
     p->idMd5 =   eC[3];
     p->UNom =    eC[4];
     p->UPrenom = eC[5];
     p->UAge =    eC[6];
     p->UTxt =    eC[7];
  
     mysql_free_result(result);
     mysql_close(m);
  
     return * p;
    }
   }
  }
  MessageBox(hWnd,"Vérifier les connexions à la base MySQL, l'existence des tables de données et de votre compte.\n"
             "Cette erreur provoque inéluctablement l'arrêt de l'application, veuillez réessayer ultérieurement\nDésolé."
             ,"Erreur",MB_ICONERROR|MB_OK);        
  mysql_close(m);
  PostQuitMessage(EXIT_FAILURE);
}


voilà donc je ne pense pas qu'il s'agisse de ca grand Maitre
mardi 27 décembre 2005 à 17:27:24 | Re : Remplir une structure "globale", comment ???

julien_boss

sinon malloc() c'est du C nan ?
faudrait pas plutot SCom.nom = new char[X] ?, si je suis ton raisonement
mardi 27 décembre 2005 à 18:04:10 | Re : Remplir une structure "globale", comment ???

vecchio56

Administrateur CodeS-SourceS
Comme tu veux, ca revient au même, mais je vois pas en quoi ca suit mon "raisonnement"
mardi 27 décembre 2005 à 18:18:13 | Re : Remplir une structure "globale", comment ???

julien_boss

c'est pas grave, ca marche pas quand meme.
sinon il existe pas autre chose qu'une structure qui équivaudrait une session en PHP ?
mardi 27 décembre 2005 à 19:22:42 | Re : Remplir une structure "globale", comment ???

vecchio56

Administrateur CodeS-SourceS
Je vois pas de malloc dans ton code précédent
mardi 27 décembre 2005 à 20:54:01 | Re : Remplir une structure "globale", comment ???

gagah1

Membre Club
Tu declares la variable globale:
static COMPTE * pSCom = NULL;

Dans ta fn fullCOMPTE() retourne le pointeur COMPTE* au lieu de struct COMPTE.
Tu fais comme ceci:
COMPTE* fullCOMPTE(char * Nom)
{
COMPTE * p = new COMPTE;

MYSQL * m;
....

//aulieu de retourner *p, tu retourne la pointeur p
return p;
}

J'espère qu' avec ceci çà passera.

1 2

Cette discussion est classée dans : remplir, char, globale, structure, scom


Répondre à ce message

Sujets en rapport avec ce message

sockets: envoi d'une structure... [ par julien20vt ] Maintenant que j'ai réussi à envoyer des char, des int[], je voudrais envoyer un structure faite maison.Le pb est que le socket n'accepte que les char Comment caster un structure en char *. [ par julien20vt ] Tout est dans le titre, j'ai ma petite structure et j'ai besoin de la caster, mais comment faire ????Merci. Structure dans une classe [ par briscard ] Hello world!!A ton le droit de passer une structure du type: struct { char *Gamma = new char[3]; char *Phase = new char[3]; }donnee;dans u pointeur sur une structure [ par xc78370 ] Bonjour, Voila mon probleme. si quelqu'un a une idée, mrci d'avance.j'ai plusieurs structures, du style :---------------------------------------struct Problème de structure et de fprintf [ par Chap71 ] Bonjour!!Je voudré savoir comment afficher le contenu de ma structure dans un .txtVoici ma structure:struct Planete {  char NomPlanete[15+1];  char Pr Taille d'une structure en mémoire [ par PeteTheBull ] Bonjour J'ai un petit problème en c++ (sous VC++6). Je défini une structure du style : typedef struct     {         __int64 B;       &nbsp envoi structure par socket [ par TALU3000 ] Je voudrais envoyer une structure de donnée plutot que d'envoyer une traditionnel chaine de caractere:Le probléme est le suivant : l'envoi de la struc Appel de structure avec argv [ par Neoflo ] Voici mon problème, j'ai défini un type de structure nombre. Puis j'ai initialisé 2 élements avec ce type (francais et anglais). Maintenant, suivant structure [ par logant83 ] bonjoir, enfaite voila j'aimerai pouvoir exploiter une structure mais voila j'i arrive pas. struct connect_nick { //ma structure char pseudo[1000 Taille de ma structure [ par crocejf2000 ] Salut a tous, J'ai un tres gros probleme qui me bloque toute mon avancé dans mon prog : j'ai une structure : typedef struct{ unsigned short Locate; ch


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,796 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales