我有一个名为test.txt的文本文件
里面会是一个数字,可能如下:
1
2391
32131231
3123121412
即它可以是任意大小的数字,从1位到x位。
该文件中只有1个东西 - 这个号码。我想要一些使用fread的代码,它将从文件中读取该字节数并将其放入适当大小的变量中。
有人能建议解决这个问题的最佳方法吗?
答案 0 :(得分:4)
您可以简单地使用:
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()
)来提供正确的空间量,然后从函数返回分配的指针。请记住在使用之前检查空值返回(内存不足)。
答案 1 :(得分:1)
实现此目的的一种方法是使用fseek将文件流位置移动到文件末尾:
fseek(file, SEEK_END, SEEK_SET);
然后使用ftell获取文件中光标的位置 - 这将返回以字节为单位的位置,以便您可以使用此值分配适当大的缓冲区,然后将文件读入该缓冲区。
我已经看到警告说这可能并不总是100%准确,但我在几个实例中使用它没有问题 - 我认为这些问题可能取决于某些平台上功能的具体实现。
答案 2 :(得分:1)
如果您想避免过度阅读,fread
不是正确的功能。您可能希望fscanf
具有%100[0123456789]
...
答案 3 :(得分:0)
取决于你需要多少聪明的数字转换...如果你不需要特别聪明和快速,你可以用getc
的类型读取它。因此,从一个初始化为0的变量开始。读取一个字符,将变量乘以10并添加新数字。然后重复直到完成。根据需要获取更大尺寸的变量,或者从最大尺寸的变量开始,然后将其复制到完成后适合的最小尺寸。