Ладно, это всего лишь часть простой клиент-серверной программы. Сейчас я просто пытаюсь реализовать простую проверку входа в систему.
Внутри файла Users.txt всего одна строка: «Брайан». Пока я не могу заставить strncmp дать положительный ответ.
#include <stdio.h>
#include <string.h>
#define BUFSIZE 1024
int main()
{
FILE * userf;
userf = fopen("Users.txt", "r");
char usrstr[30];
char buffer[30];
char userbuffer[30];
fgets (buffer, sizeof(buffer), userf); //loads Users.txt in buffer
gets(userbuffer); //type whatever user
printf ("Your login is: %s\n", userbuffer);
if(strncmp (buffer, userbuffer, sizeof(userbuffer)) == 0)
{
sprintf(usrstr, "\nCorrect login received.\n"); // faster than printf
puts(usrstr); //displays content of sprintf above
bzero(usrstr, sizeof(usrstr)); //clears usrstr buffer
printf("buffer is %s.\n",buffer); //for checking
printf("userbuffer is %s.\n",userbuffer); //for checking
}
else
{
sprintf(usrstr, "\nIncorrect login received.\n");
puts(usrstr);
bzero(usrstr, sizeof(usrstr));
printf("buffer is %s.\n",buffer); //for checking
printf("userbuffer is %s.\n",userbuffer); //for checking
}
fclose(userf);
return(0);
}
И тогда на выходе я получаю:
Bryan
Your login is: Bryan
Incorrect login received.
buffer is Bryan
.
userbuffer is Bryan.
Я предполагаю, что ключевой причиной является длинный интервал после буфера, но я понятия не имею, что его вызывает. Мои навыки программирования довольно дерьмовые, поэтому любая помощь будет принята с благодарностью.
stdio.h
. 2. Найдите прототип дляgets()
3. удалите эту строку кода. 4. Сохраните файл. Эта функция называется Evil с большой буквы E. Не используйте ее. - person WhozCraig   schedule 25.08.2013