Je n'arrive pas à comparer les chaînes en C (avec lesquelles je suis relativement nouveau). J'ai une socket sur cette application serveur en attente d'accepter les données d'un client. Dans cette partie particulière de mon programme, je veux être en mesure d'exécuter une requête MySQL basée sur les données reçues du client. Je veux être capable de savoir quand les données reçues ont la valeur de "newuser" pour lancer une procédure d'enregistrement simple. Strcmp renvoie une valeur 1 positive où je crois que je devrais obtenir un 0 parce que les valeurs devraient être égales.Comparaison de chaînes dans C - strcmp
Code Source:
//setup socket
//loop and select structure to handle multiple connections
if ((nbytes = recv(i, buf, sizeof buf, 0)) <= 0) {
// got error or connection closed by client
if (nbytes == 0) {
// connection closed
printf("selectserver: socket %d hung up\n", i);
} else {
perror("recv");
}
close(i); // bye!
FD_CLR(i, &master); // remove from master set
} else {
char check[] = "newuser";
char fromUser[sizeof check];
strncpy(fromUser,buf, sizeof check);
printf("length of fromUser: %d\n", sizeof fromUser);
printf("length of check: %d\n", sizeof check);
printf("message from user: %s\n", fromUser);
printf("check = %s \n", check);
int diff = strcmp(fromUser, check);
printf("compare fromUser to check: %d\n", diff);
if (strcmp(fromUser, check) == 0) {
printf("aha! new user");
}
Sortie:
length of fromUser: 8
length of check: 8
newuser from user: newuser
check = newuser
compare fromUser to check:
J'ai un sentiment que je ne suis pas manipuler la mémoire tampon entrant copie correctement ou de manière erronée le tampon.
Vous ne consignez pas la valeur fromUser, seulement sa longueur. – Tom