Comparaison de chaînes de caractères
Résolu
orci76
-
orci76 -
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) :
transmis par
et reçu avec
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é :
Ou en stockant test dans une variable:
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.
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.
A voir également:
- Comparaison de chaînes de caractères
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Comparaison million milliard - Accueil - Technologies
- Caractères ascii - Guide
- Caractères spéciaux - Guide
- Exemple de mot de passe à 8 caractères - Guide
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.
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.
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,
Merci de votre aide, bonne soirée.
Raphaël.