Большой интервал после загрузки буфера из текстового файла

Ладно, это всего лишь часть простой клиент-серверной программы. Сейчас я просто пытаюсь реализовать простую проверку входа в систему.

Внутри файла 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.

Я предполагаю, что ключевой причиной является длинный интервал после буфера, но я понятия не имею, что его вызывает. Мои навыки программирования довольно дерьмовые, поэтому любая помощь будет принята с благодарностью.


person gwar666    schedule 25.08.2013    source источник
comment
Примечание: 1. Откройте stdio.h. 2. Найдите прототип для gets() 3. удалите эту строку кода. 4. Сохраните файл. Эта функция называется Evil с большой буквы E. Не используйте ее.   -  person WhozCraig    schedule 25.08.2013


Ответы (2)


Ну, это работает для меня

У вас есть новая строка [ENTER] в Users.Txt после "Брайан"

Удалите новую строку из текстового файла.

Or

Использовать

fgets (buffer,strlen(userbuffer)+1, userf);

после ввода пользователя

person P0W    schedule 25.08.2013
comment
Хм, странно. открытие Users.txt в Ubuntu (запуск его на виртуальной машине) с использованием gedit не имело новой строки, но копирование его на мой рабочий стол Win7 и запуск Блокнота показало, что в нем действительно есть новая строка. В любом случае, моя проблема решена, спасибо :) - person gwar666; 25.08.2013

попробуй изменить

if(strncmp (buffer, userbuffer, sizeof(userbuffer)) == 0)

to

если (strncmp (буфер, пользовательский буфер, strlen (пользовательский буфер)) == 0)

Таким образом, он будет сравнивать только длину строки, а не весь буфер.

person mp3ferret    schedule 25.08.2013