繁体   English   中英

在C中无法从二进制文件读取

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM