[英]Reading from binary file is unsuccessful in C
我正在使用C编程语言,并试图读取二进制File中每一行的第一个字符串。
二进制文件中的数据示例(为了显示给您,我已写入txt文件)
Iliya Iliya Vaitzman 16.00以色列1 0 1
我想阅读该行的第一个Iliya(或该行的第一个单词将是什么)。
我正在尝试以下代码,但它始终将NULL返回给我给他的字符串变量
如下代码:
FILE* ptrMyFile;
char usernameRecieved[31];
boolean isExist = FALSE;
ptrMyFile = fopen(USERS_CRED_FILENAME, "a+b");
if (ptrMyFile)
{
while (!feof(ptrMyFile) && !isExist)
{
fread(usernameRecieved, 1, 1, ptrMyFile);
if (!strcmp(userName, usernameRecieved))
{
isExist = TRUE;
}
}
}
else
{
printf("An error has encountered, Please try again\n");
}
return isExist;
我将typedef和#define用作布尔变量(0为false,其他所有条件为true(TRUE为true,FALSE为false))
usernameRecieved不断从fread中获取NULL。
为了解决这个问题我该怎么办?
代替这个:
fread(usernameRecieved, 1, 1, ptrMyFile);
尝试这个:
memset(usernameRecieved, 0, sizeof(usernameRecieved));
fread(usernameRecieved, sizeof(usernameRecieved)-1, 1, ptrMyFile);
实际上,您最多只能从文件读取一个字节。
有两件事:您将fread中的count字段设置为1,因此最多只能读取1个字节(假设您未触及EOF或其他终端标记)。 您可能想要的是:
fread(usernameRecieved, 1, 31, ptrMyFile);
这样,您将复制到整个char缓冲区中。 然后,您只想比较所使用的任何定界符(空格,句点等)。
目前尚不清楚“ usernameRecieved保持为空”的含义。 usernameRecieved在堆栈上(您未使用malloc)。 您是说什么也没读吗? 我强烈建议您始终检查fread的返回值以查看读取了多少。 这对调试很有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.