繁体   English   中英

在 c 中确定用于缓冲区分配的文件大小

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM