从文本文件加载缓冲区后的长间距

时间:2013-08-25 18:00:30

标签: c buffer strncmp

好的,这只是一个简单的客户端 - 服务器程序的一部分。现在我只想尝试实现一个简单的登录检查器。

在Users.txt文件中只有一行:“Bryan”。到目前为止,我无法做出积极的回应。

#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.

我猜测缓冲区之后的长间距是关键原因,但我不知道是什么导致它。 我的编程技巧很糟糕,所以非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

这对我有用

“Bryan”后你的[ENTER]中有换行符Users.Txt

从文本文件中删除换行符。

或者

使用

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

用户输入后

答案 1 :(得分:0)

尝试更改

  

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

  

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

这样它只会比较thr字符串的长度 - 而不是整个缓冲区