【发布时间】:2013-07-09 20:51:23
【问题描述】:
我正在使用 C 编程语言并试图读取二进制文件中每一行的第一个字符串。
二进制文件中的数据示例(我已经写入了一个txt文件以便向您展示)
伊利亚伊利亚瓦茨曼 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 为假,其他一切为真(TRUE 为真,FALSE 为假))
usernameRecieved 不断从 fread 获取 NULL。
我应该怎么做才能解决这个问题?
【问题讨论】:
-
你知道你只读取 fread() 中的一个字节吗?
-
二进制文件的格式是什么?您不能只使用
freed()从二进制文件中读取 C 字符串,除非它\0终止并且您知道确切的位置和长度。userName未定义。 -
您的文件读取逻辑错误。
feof()函数仅在您已尝试读取文件末尾 时返回非零值。这意味着在您成功读取文件中的最后一条记录后,feof()返回 false,然后您执行另一个fread()并继续使用结果。fread()的返回值是已读取的对象数,因此正确的程序是始终测试fread()的返回值,如果该值为零或其他“错误”,则 你检查feof()并决定是否退出循环。 (另见ferror()。) -
对此感到好奇,您正在打开文件进行读写(二进制模式),初始位置是EOF