Comparaison de chaînes de caractères

Résolu/Fermé
orci76 - 29 juil. 2010 à 01:28
 orci76 - 30 juil. 2010 à 03:57
Bonjour,

Je suis en ce moment sur les socket.
Mon serveur transmet un message à mon client, avec la variable buffer déclarée comme cela (pour le serveur et le client) :
char buffer[512];

transmis par
send(sock,buffer,sizeof(buffer),0);

et reçu avec
recv(sock,buffer,sizeof(buffer),0);

Bref, je veut que si par exemple le serveur envoi le mot "test" au client, il (le client) le détecte et sorte n'importe quel action en conséquence.
J'ai donc été sur le net et j'ai testé :
        if(strcmp(bufferStamp, "test") == 0)
        {
            printf("Vous avez ecris test");
        }

Ou en stockant test dans une variable:
char test[] = "test";

Et en remplaçant "test" par test dans le strcmp, mais rien à faire, même dès que j'envoie le bon mot, rien.
Je ne comprend pas du tout mon erreur, merci d'avance pour votre aide.

PS : J'ai aussi testé de stocker la comparaison dans une int (pour voir le chiffre affiché) mais des que je l'affiche, si je met la phrase normal, sa me sort 1 et si je la met en majuscule -1...
PPS : Je suis sur Windows XP (ou 2000 parfois) avec CodeBLock 8.2(ou 02?)

Merci, Raphaël.

1 réponse

Bonjour,

Je pense qu'il faudrait ajouter le caractère de fin de chaîne à la fin du buffer reçu :
int nOctetsRecus = recv(sock,buffer,sizeof(buffer),0);
buffer[nOctetsRecus]="\0";

Tu peux tester la différence en affichant le strlen() du buffer reçu, sans l'ajout du "\0", et avec ; tu devrais voir la différence de taille...

Je pense aussi que tu devrais l'envoyer en spécifiant le strlen, plutot que le sizeof :
send(sock,buffer,strlen(buffer),0);

D'ailleurs, cette seconde modif rendra peut-être l'ajout du "\0" inutile...
A tester...

C'est OK maintenant ?

Cordialement, M.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
29 juil. 2010 à 08:43
buffer[nOctetsRecus]="\0";
Il faut faire attention à ne pas écrire à l'extérieur de la chaîne. De plus ce n'est pas = "\0" qu'il faut mettre mais ='\0'.

D'ailleurs, cette seconde modif rendra peut-être l'ajout du "\0" inutile...
Non, ou alors faudrait mettre : send(sock, buffer, strlen(buffer)+1,0);

Cdlt,
0
Tout à fait d'accord avec toi.
0
Merci beaucoup de vos réponses je vais essayer et je vous dit sa.
0
Merci, sa à marché.
Merci de votre aide, bonne soirée.
Raphaël.
0