Bonjour à tous !
Je suis en train de faire un programme de type Cloud en C, mais je bloque sur pas mal de trucs...
Voilà déjà la fonction qui pose problème, son rôle est de récupérer un pseudo d'un client, de regarder dans une liste d'inscrits si le pseudo existe et d'agir en conséquence.
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 static void * gestion(void * socket){ printf("Dialogue en cours\n"); char buffer[512]; int client=*((int*)socket); int lu = read(client,buffer, 512); char *pseudo=malloc(lu); strncpy(pseudo,buffer,lu); printf("le serveur a recu: %s\n",buffer); FILE *f; f=fopen("inscrits","a+"); char * line; size_t taille; int boolean=0; if(f!=NULL){ lu = getline(&line,&taille,f); while((lu!=-1)&&boolean==0){ printf("%s",pseudo); char * line2=malloc(lu*sizeof(char)); strncpy(line2,line,lu-1); printf("%s",line2); if(strcmp(line2,pseudo)==0) boolean=1; printf("\n%d",boolean); lu=getline(&line,&taille,f); free(line2); } if(boolean) miseajour(pseudo); else creer(pseudo,f); } write(client,buffer, 512); shutdown(client,2); fclose(f); close(client); pthread_exit(NULL); }
Premier problème : le deuxième malloc, celui dans le while, me donne une segfault dans tout les cas, sauf si j'enlève le premier malloc, celui de "pseudo"...
Deuxième soucis, qui m'a amené à faire des malloc partout tongue : je n'arrive pas à comparer mes deux chaines avec un résultat correct. Un coup c'est buffer qui contient des caractères qu'il ne devrait pas avoir ( d'où l'utilisation de pseudo ), un coup c'est le \n dans line qui ne veut pas partir... ( D'où line2, mais on revient au premier problème... )
J'ai essayé aussi cette fonction récupérée sur le net, mais qui ne renvoie qu'une chaine vide :
J'ai modifié mon code de toutes les façons que j'ai pu imaginer, rien ne va. Si vous avez une idée qui marche, je vous épouse sur le champ ! Merci d'avance !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 char* strRemoveCRLF(char *psz) { char *d = psz; // POINTEUR D'ECRITURE while(*psz) { if((*psz != '\r') && (*psz != '\n')) *d++ = *psz; psz++; } *d = 0; return d; }
Partager