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 :

Utilisation de fichier ini


Sujet :

C

  1. #21
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    On ne fait un free() que sur un pointeur alloué avec malloc() et compagnie...

    Pas sur un buffer local ou statique, ni sur un pointeur vers l'intérieur d'un buffer alloué avec malloc()...

    sName est un pointeur vers l'intérieur d'un buffer local...

  2. #22
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 302
    Points : 78
    Points
    78
    Par défaut
    Ha bin voila ... Me semblait bien ...

    Et donc comme ip_adr recup la valeur d'un strdup bah il faut le free parce que le strdup alloue de la mémoire ... J'ai compris ^^


    Bon voila donc c'est bien ce que je pensais avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(strchr(sName, '='), "%s", "\0");
    Ca fonctionne

    mais avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *strchr(sName, '=') = "\0";
    Ca ne fonctionne pas ...

    Voila et maintenant j'ai un autre probleme ...
    infoServeur.sin_port = htons((unsigned short)port); Si je cast la valeur de port comme ca, je ne suis pas sencé recup la valeur en unsigned short ? :s

  3. #23
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    J'avais dit '\0', pas "\0"...

  4. #24
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 302
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    J'avais dit '\0', pas "\0"...
    Vraiment désolé ... :-(

    Meme l'adresse n'a pas l'air bonne ... Je recois une erreur avec le code 10049 ... Qui correspond a une mauvaise addresse ... OU alors c'est peut etre un mauvais port ... Je converti mal un *char en unsigned short ...

    Mais comment transformer un *char en unsigned short ?

    pfff quel emrde

  5. #25
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    On convertit une chaîne de caractère en nombre avec les fonctions standard strtol() (qui retourne un long) ou strtoul() (qui retourne un unsigned long).

  6. #26
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 302
    Points : 78
    Points
    78
    Par défaut
    Hum ... Voila ... Le probleme qui se presente maintenant :

    Dans ma fonction il recup bien les valeur qu'il faut ... Et quand je les affiche c'est les bonnes (logique puisqu'il recup bien les valeurs) ...

    Now quand j'arrive les valeur que je recup avec le retour de ma fonction, elles ne sont plus correct ... :s ...

    Donc dans ma fonction, mes parametre ssont bien trouvé ... Une fois que je les affiches dans ma boucle principale (donc en dehors de ma fonction pour recup un mort dans un fichier), ils sont changé ... il reprend une autre partie du texte
    C'est comme si tout était decallé d'une ligne :s


    Est ce que c'est le strdup qui foire ?
    return(strdup(sValue));

    Mmmmh ... Non ce n'est pas le strdup qui foire ... Je viens d'essayer avec un bete
    return(sValue);
    Le probleme est toujours la ...

  7. #27
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 302
    Points : 78
    Points
    78
    Par défaut
    Médinoc Help

  8. #28
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Ben je ne sais pas, moi...
    Poste-donc la dernière version de ton code...

  9. #29
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 302
    Points : 78
    Points
    78
    Par défaut
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    char* getconf(const char *name){
     
         FILE *fichier;
         char sLine[1024];
         char *sName = NULL;
         char *sValue = NULL;
     
         memset(sLine, 0x0, sizeof(sLine));
     
         // Ouvre le fichier en lecture seule
         fichier = fopen("config.ini", "r");
     
         // Si erreur ouverture fichier arret programme
         if(!fichier){
           MessageBox(NULL,CONFIG,"Erreur ouverture fichier : fichier de config !",MB_OK|MB_ICONERROR);
           step = 3;
         }
     
         // On boucle ligne par ligne jusqu'a la fin du fichier
         while(fgets(sLine, (int)sizeof sLine, fichier) && sValue == NULL){
           if(strchr(sLine, '=')){
             sName = sLine;
             *strchr(sName, '=') = '\0';
             if(!strcmp(sName, name)){
                                sValue = sName+strlen(sName)+1;
                                MessageBox(NULL, sValue, "Erreur connexion : Hum",MB_OK|MB_ICONERROR);
             }
           }
         }
         if(sValue == NULL){
           MessageBox(NULL,"Parametre non trouve.\nVerifiez le fichier config.ini",name,MB_OK|MB_ICONERROR);
           step = 3;
         }
     
         fclose(fichier);
         return(strdup(sValue));
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      char *ip_adr = NULL;
      char *port = NULL;
      ip_adr = getconf("ip");
      port = getconf("port");
      MessageBox(NULL, ip_adr, "Erreur connexion : IP0",MB_OK|MB_ICONERROR);
      MessageBox(NULL, port, "Erreur connexion : PORT0",MB_OK|MB_ICONERROR);
      infoServeur.sin_family = AF_INET;
      infoServeur.sin_addr.s_addr = inet_addr(ip_adr);            // Indiquez l'adresse IP de votre serveur  
      infoServeur.sin_port = htonl(strtoul(port,NULL,0));         // Port écouté du serveur 
      free(ip_adr);
      ip_adr = NULL;
      free(port);
      port = NULL;

  10. #30
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Ça y est, j'ai compris: Tu dois mettre le test sValue==NULL avant le test sur fgets().
    Code corrigé : Sélectionner tout - Visualiser dans une fenêtre à part
    while(sValue == NULL && fgets(sLine, (int)sizeof sLine, fichier)) {

  11. #31
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 302
    Points : 78
    Points
    78
    Par défaut
    Balaize ... J'aurai jamais cru que ca pourrait avoir ce comportement la a cause de ca ... :s


    Merci en tout ca ... Maintenant me reste a comprendre pourquoi il ne veut pas faire ma connection au socket serveur ... Humpff ... Apparement il prend mal les parametres pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      infoServeur.sin_family = AF_INET;
      infoServeur.sin_addr.s_addr = inet_addr(ip_adr);            // Indiquez l'adresse IP de votre serveur  
      infoServeur.sin_port = htonl(strtoul(port,NULL,0));         // Port écouté du serveur

  12. #32
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    C'est htons() pour le n° de port.

  13. #33
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 302
    Points : 78
    Points
    78
    Par défaut
    Merci beaucoup medinoc du temps que tu as passé avec mes problemes et moi ... J'ai l'impression que j'ai l'air con avec mes betes questions ... Parce que c'est con au final ...

    Mais en tout cas ... Tu es baleize ...

    Ets ce que ca te dérange si tu deviens mon cyberDieu ?

    Lol merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/03/2014, 11h05
  2. Utilisation TIniFiles (fichier ini)
    Par beni34 dans le forum Débuter
    Réponses: 11
    Dernier message: 14/04/2009, 18h23
  3. [VB.Net][Fichier ini] utilisation des API
    Par DonF dans le forum Windows Forms
    Réponses: 5
    Dernier message: 09/03/2009, 14h32
  4. Pinguer plusieurs Ports en utilisant un fichier INI
    Par fthdz dans le forum Langage
    Réponses: 16
    Dernier message: 14/11/2007, 13h26
  5. Utiliser un fichier ini
    Par Sytchev3 dans le forum Langage
    Réponses: 3
    Dernier message: 14/08/2007, 17h48

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