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