我正在使用C编程语言,并且我正在尝试读取二进制文件中每行的第一个字符串。
二进制文件中的数据示例(我已写入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。
我该怎么做才能解决这个问题?
答案 0 :(得分:0)
而不是:
fread(usernameRecieved, 1, 1, ptrMyFile);
试试这个:
memset(usernameRecieved, 0, sizeof(usernameRecieved));
fread(usernameRecieved, sizeof(usernameRecieved)-1, 1, ptrMyFile);
实际上,您最多只读取文件中的一个字节。
答案 1 :(得分:0)
有两件事:你将fread中的count字段设置为1,所以你最多只能读取1个字节(假设你没有点击EOF或其他终端标记)。 你可能想要的是:
fread(usernameRecieved, 1, 31, ptrMyFile);
这样你就可以复制到整个char缓冲区了。然后,您只想比较您正在使用的任何分隔符(空格,句点等)。
目前尚不清楚“usernameRecieved持续获取NULL”是什么意思; usernameRecieved在堆栈中(您没有使用malloc)。你的意思是什么都没有被阅读?我强烈建议你总是检查fread的返回值,看看读了多少;这有助于调试。