[英]determine size of file for buffer allocation in c
我编写的这段代码应该遍历一个文件并在每次它变为+1
字符时递增大小计数器:
while (fgetc(input) != EOF)
size++;
if (feof(input)) {
buff = (char *)malloc(sizeof(char) * size + 1);
}
虽然未达到文件末尾,但大小正在增加。 如果EOF-> feof==true
并且 buffer-size 可以确定。
只是想知道是否有可能那样做,或者是否有更好的方法来做到这一点。
假设在循环之前将size
初始化为0
,并且input
是stream的开头,那么循环将正确地确定可以从文件中读取的字节数。
在循环后测试feof()
以区分文件结束和读取错误情况。 通常不需要做这个区分,所以你可以去掉这个测试。
malloc(sizeof(char) * size + 1)
分配正确的字节数以将文件读取为 C 字符串,但表达式不正确:它应该是sizeof(char) * (size + 1)
或只是size + 1
因为sizeof(char)
根据定义为1
。
请注意,您需要明确设置 null 终止符,因为malloc()
不会初始化它分配的块。
另请注意,某些流(例如终端)可能不可搜索,因此如果您需要倒回 stream 以读取字节,则此方法可能会失败。
最后请注意,在 MS/DOS 和 Windows 等使用 2 个字节作为行尾标记的遗留系统上, size
可能小于文件长度。
使用 ftell() function 大小可以确定,如
fseek( input, 0, SEEK_END );
size = ftell( input);
然后将指针设置为文件开头,
fseek( input, 0, SEEK_SET );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.