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...
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...
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
Ca fonctionne
Code : Sélectionner tout - Visualiser dans une fenêtre à part sprintf(strchr(sName, '='), "%s", "\0");
mais avecCa ne fonctionne pas ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part *strchr(sName, '=') = "\0";
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
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
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).
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 ...
Médinoc Help
Ben je ne sais pas, moi...
Poste-donc la dernière version de ton code...
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;
Ç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)) {
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
C'est htons() pour le n° de port.
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager