Comparaison de chaînes de caractères [Résolu/Fermé]

Signaler
-
 orci76 -
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.
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 686
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,
Tout à fait d'accord avec toi.
Merci beaucoup de vos réponses je vais essayer et je vous dit sa.
Merci, sa à marché.
Merci de votre aide, bonne soirée.
Raphaël.