У меня возникли проблемы с сравнением строк на C (с которыми я довольно новичок). У меня есть сокет на этом серверном приложении, ожидающий приема данных от клиента. В этой части моей программы я хочу иметь возможность выполнить запрос MySQL на основе данных, полученных от клиента. Я хочу знать, когда полученные данные имеют значение «newuser», чтобы инициировать простую процедуру регистрации. Strcmp возвращает положительное значение 1, где я считаю, что мне нужно получить 0, потому что значения должны быть равны.Сравнение строк в C - strcmp
Исходный код:
//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");
}
Выход:
length of fromUser: 8
length of check: 8
newuser from user: newuser
check = newuser
compare fromUser to check:
У меня есть чувство, что я не обрабатывает входящий буфер правильно или ошибочно копирование в буфер.
Вы не регистрируете значение fromUser, а только его длину. – Tom