从二进制文件读取在C中不成功

时间:2013-07-09 20:51:24

标签: c project

我正在使用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。

我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:0)

而不是:

fread(usernameRecieved, 1, 1, ptrMyFile);

试试这个:

memset(usernameRecieved, 0, sizeof(usernameRecieved));
fread(usernameRecieved, sizeof(usernameRecieved)-1, 1, ptrMyFile);

实际上,您最多只读取文件中的一个字节。

答案 1 :(得分:0)

Documentation on fread

有两件事:你将fread中的count字段设置为1,所以你最多只能读取1个字节(假设你没有点击EOF或其他终端标记)。 你可能想要的是:

fread(usernameRecieved, 1, 31, ptrMyFile);

这样你就可以复制到整个char缓冲区了。然后,您只想比较您正在使用的任何分隔符(空格,句点等)。

目前尚不清楚“usernameRecieved持续获取NULL”是什么意思; usernameRecieved在堆栈中(您没有使用malloc)。你的意思是什么都没有被阅读?我强烈建议你总是检查fread的返回值,看看读了多少;这有助于调试。