我有一个看起来像这样的文本文件
用户1 |密码1
用户2 |密码2
我有一个字符串,说“user1 | password1”。我需要将文本文件的每一行与此字符串进行比较。
FILE *fp;
fp = fopen("user_info_file.txt", "r");
while(fgets(str, 10, fp)!=NULL){
n = write(newsockfd, "STR:", 4);
n = write(newsockfd, str, 15);}
然后继续strcmp。我使用write函数,因为我有一台服务器将其写入客户端。
我只是将15作为一个随机值(它在界限内)来查看是否正在读取任何文本。但是当它打印str时,well str不包含任何东西。它只是打印为“STR:”,然后我将我的提示返回到下一行。
请告诉我如何将user_info_file.txt(至少第一行)中的数据读入str。我花了好几个小时,但我似乎无法得到它。新手在这里,请耐心等待。
编辑: 基本上我正在创建一个IM应用程序。用户通过输入用户名和密码进行注册,该用户名和密码被发送到服务器,服务器以上面写的形式将其存储在user_info_file中。用户注册后,他们需要能够登录。他们输入用户名和密码,我再次发送到服务器。然后我需要服务器将此字符串与user_info_file中的现有条目进行比较以验证登录。所以我需要服务器检查user_info_file的每一行,并将其与用户输入的内容进行比较。
所以我有
char* str = new char[256];
FILE *fp;
fp = fopen("user_info_file.txt", "r");
while(fgets(str, 10, fp)!=NULL){
n = write(newsockfd, "STR:", 4);
n = write(newsockfd, str, 15);}
if(strcmp(buffer, str) == 0)
n = write(newsockfd, "Logged in", 9);
else
n = write(newsockfd, "No such username", 16);
基本上我试图将每行user_info_file读入str。然后我在每个读取行与缓冲区之后比较str。 buffer存储客户端发送的登录信息。如果它们匹配,则登录应该成功。
但是,当我写str时,它不会打印任何东西。 15是str应该写的字符数,对吗?因此,即使数字是5,它也应该打印至少“user1”或“user2”或者user_info_file的SOME行的前5个字符。但看起来并没有任何东西可以从文件中读取到str中。
我希望我已经说清楚了。我能做什么?我的智慧结束了。
答案 0 :(得分:0)
我不认为在你的情况下使用 fgets 函数从char读取文件char很方便。 我建议你使用 fscanf ,为你提供更多的机会:比如同时阅读不同格式的值。 在这里,我得到了一些代码snipet,以演示如何使用fscanf从文件中获取所需信息:
int main(void)
{
char str[256];
char checkLogin[256];
char checkPassword[256];
FILE *fp = fopen("user_info_file.txt", "r");
/*while(fgets(str, 10, fp)!=NULL){
n = write(newsockfd, "STR:", 4);
n = write(newsockfd, str, 15);}*/
int scanSucceed = 1;
do
{
scanSucceed = fscanf(fp,"%s|%s ", checkLogin, checkPassword);
if (!strcmp(checkLogin, buffer))
{
// in case if password for that login match
if (!strcmp(checkPassword, password))
{
ValidLogin = true;
scanSucceed = -1; // exit from while loop
}
}
}
while(scanSucceed != -1); // while string was read
}