我想讀取 .txt 檔案的內容并將其存盤在緩沖區中。要讀取我使用的檔案fread()。
手冊頁說:
" 成功時, fread() 和 fwrite() 回傳讀取或寫入的專案數。此數字等于僅當 size 為 1 時傳輸的位元組數。
我遇到的問題是,在下面的代碼中,函式呼叫回傳了 216 個位元組。但在最終緩沖區中,內容僅包含一個字符。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
bool readFile(const char* pFileName, char* outFile) {
FILE* myFile;
myFile = fopen(pFileName, "r");
if (myFile == NULL) {
printf("File could not be opened.");
return false;
}
printf("Size of my file: %d\n",sizeof(*myFile));
printf("Size of output buffer %d\n",sizeof(outFile));
printf("sizeof(*outFile) / sizeof(outFile) %d\n",sizeof(*myFile) / sizeof(myFile[0]));
size_t res = fread(outFile, sizeof(*outFile), sizeof(*outFile)/sizeof((outFile)[0]), myFile);
printf("freadResult: %d\n", res*sizeof(*myFile));
fclose(myFile);
return true;
}
int main(){
char* fileName = "test.txt";
char* outFile = (char*)malloc(4096);
bool result = readFile(fileName, outFile);
if(!result){
printf("Error\n");
} else {
printf("Success\n");
for(char* tmp = outFile; *tmp != '\0' ; tmp){
printf("%c", *tmp);
}
printf("\n");
}
printf("Programm finished\n");
return 0;
}
test.txt 檔案有以下三行作為內容:
I was
opened
successfully!
如果我構建并執行 readFileTest 我得到以下輸出:
$ gcc readFileTest.c -o readFileTest
$ ./readFileTest
>Size of my File: 216
>Size of output Buffer 8
>sizeof(*outFile) / sizeof(outFile) 1
>freadResult: 216
>Success
>I
>Programm finished
uj5u.com熱心網友回復:
在這一行
size_t res = fread(outFile, sizeof(*outFile), sizeof(*outFile)/sizeof((outFile)[0]), myFile);
運算式sizeof(*outFile)等價于運算式sizeof(char)(變數outFile的char *型別是與is相同的運算式的型別)*outFile并且等于。同時運算式等價于并且 a;so 等價于。outFile[0]char1sizeof(*outFile)/sizeof((outFile)[0])sizeof(char)/sizeof(char )1
您需要將動態分配陣列的實際大小傳遞給函式并在函式中使用它。
請注意,要輸出sizeof運算子的值,您必須使用轉換說明符,zu而不是d在 printf 呼叫和此呼叫中
printf("Size of my file: %d\n",sizeof(*myFile));
該運算式sizeof(*myFile)產生結構的大小FILE。它不是檔案的大小。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/483990.html
上一篇:C-交替指標
下一篇:C中的未知函式簽名
