C - Буфер получает добавление
Я пытаюсь создать систему входа в Linux с именованными каналами.
У меня есть цикл do-while, который запускается до тех пор, пока не будет угадан правильный пароль или 3 неудачных попытки. Проблема в том, что каждый раз, когда я "спрашиваю" у пользователя новый пароль, последний пароль и текущий соединяются в буфер.
do
{
if(tentativas_login > 0)
{
sleep(5);
}
if (tentativas_login > 2)
{
close(c_fifo_fd);
close(s_fifo_fd);
unlink(c_fifo_fname);
sleep(5);
return;
}
printf("[ADMIN]: Introduza password de acesso: ");
scanf("%s", buffer);
/* ---- b) GET PASSWORD ---- */
strcat(login_flag, buffer);
strcat(login_flag, ".");
printf("Sent: %s\n", login_flag); //-> here is the problem
strncpy(perg.palavra,login_flag,TAM_MAX-1); //copia a palavra lida do "buffer" para a "perg.palavra"
/* ---- c) SEND PASSWORD ---- */
write(s_fifo_fd, & perg, sizeof(perg));
sleep(1);
read_res = read(c_fifo_fd, & resp, sizeof(resp));
if (read_res == sizeof(resp))
{
compare_result = strncmp(resp.palavra, "Pass Certa", 100);
printf("[ADMIN]: Devolveu -> %s \n", resp.palavra);
if(compare_result != 0)
{
printf("[ADMIN]: Password errada! Tente novamente.\n");
tentativas_login++;
}
}
else
{
printf("Sem resposta ou resposta incompreensivel[%d]\n",read_res);
}
}while(compare_result != 0);
пример
Входные данные :
foo
bar
pikachu
Выход:
login.foo.
login.foo.bar
login.foo.bar.pikachu.
1 ответ
Решение
Вы используете strcat() без очистки старого буфера. Другими словами, новые и старые буферы добавляются, потому что это то, что вы им сказали делать. Обнулить буфер в начале каждого цикла следующим образом:
memset(login_flag, 0, length_of_buffer);