Я программирую очень простой сокет-сервер, следуя этому примеру кода . Сервер запущен и работает, и я могу подключиться к нему через telnet (на самом деле, используя Putty). Всякий раз, когда получено новое соединение, я порождаю новый поток, который имеет следующий код:
DWORD WINAPI receive_cmds(LPVOID lpParam)
{
char outbuffer[100];
outbuffer[0] = '\0';
char inbuffer[100];
inbuffer[0] = '\0';
int res;
SOCKET current_client = (SOCKET)lpParam;
while (1) {
res = recv(current_client, inbuffer, sizeof inbuffer - 1, 0);
if (res > 0) {
inbuffer[res] = '\0';
printf("Got '%s'\n", inbuffer);
}
Sleep(10);
if (res == 0) {
closesocket(current_client);
ExitThread(0);
}
//printf("%s\n", inbuffer);
strcpy(inbuffer, "");
}
}
Как только я подключаюсь, он печатает этот бред:
Если я введу «hello», а затем «stackoverflow» в клиенте, это то, что я получаю:
Даже если я явно объявил конец строки '\ 0', кажется, что она занимает гораздо больше строки, плюс я не знаю, почему она печатает ввод два раза, второй - первый минус первый один или два символа.
Любая помощь в понимании того, что происходит? Заранее спасибо.
РЕДАКТИРОВАТЬ: отредактировано в соответствии с предложением unwind