簡體   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