[英]C using fread to read an unknown amount of data
我有一個名為 test.txt 的文本文件
里面會有一個數字,它可能是以下任何一個:
1
2391
32131231
3123121412
即它可以是任何大小的數字,從 1 位數字到 x 位數字。 該文件中只有 1 個東西——這個數字。
我想要一些使用fread()
的代碼,它將從文件中讀取該字節數並將其放入適當大小的變量中。 這是在嵌入式設備上運行; 我關心 memory 的使用情況。
如何解決這個問題呢?
你可以簡單地使用:
char buffer[4096];
size_t nbytes = fread(buffer, sizeof(char), sizeof(buffer), fp);
if (nbytes == 0)
...EOF or other error...
else
...process nbytes of data...
或者,換句話說,為自己提供足夠大的數據空間以存儲任何有效數據,然后記錄實際讀取到字符串中的數據量。 請注意,除非buffer
在fread()
之前包含全部為零或文件包含零字節,否則該字符串不會以空值終止。 在使用之前,您不能依賴局部變量歸零。
目前尚不清楚如何創建“適當大小的變量”。 您可能最終使用動態內存分配( malloc()
)來提供正確的空間量,然后從函數返回分配的指針。 請記住在使用之前檢查空值返回(內存不足)。
如果你想避免過度閱讀, fread
不是正確的功能。 您可能希望fscanf
具有%100[0123456789]
行的轉換說明符...
這篇文章有點晚了,但我不得不解決我需要從文件讀取和復制的情況,但我不知道文件的大小,並且所述文件的大小可能會改變,所以我需要一個確定大小的動態方法,以及使用 fseek() 和 ftell() 的方法,雖然不是按照原始答案中所述使用,但它僅在我將偏移量設置為 (0) 零時才有效,並且從哪里到結束文件,因此 fseek(FILE *ptr, 0, SEEK_END),然后簡單地使用 ftell() 來獲取原始答案中所述的值
取決於你需要多少聰明的數字轉換......如果你不需要特別聰明和快速,你可以用getc
讀取一個類型的字符。 因此,從一個初始化為0的變量開始。讀取一個字符,將變量乘以10並添加新數字。 然后重復直到完成。 在整個過程中根據需要獲取更大尺寸的變量,或者從最大尺寸的變量開始,然后將其復制到完成后適合的最小尺寸。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.