0

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

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

4

2 回答 2

0

而不是这个:

fread(usernameRecieved, 1, 1, ptrMyFile);

试试这个:

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

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

于 2013-07-09T20:56:46.773 回答
0

fread 文档

有几件事:您将 fread 中的计数字段设置为 1,因此您最多只能读取 1 个字节(假设您没有碰到 EOF 或其他终端标记)。您想要的可能是:

fread(usernameRecieved, 1, 31, ptrMyFile);

这样,您将复制到整个 char 缓冲区中。然后,您只想比较您使用的任何分隔符(空格、句点等)。

目前尚不清楚“usernameRecieved 不断变为 NULL”是什么意思;usernameRecieved 在堆栈上(您没有使用 malloc)。你的意思是什么都没有被读取?我强烈建议您始终检查 fread 的返回值以查看读取了多少;这有助于调试。

于 2013-07-09T20:58:05.107 回答