在 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 和缓冲区大小 可以确定。

只是想知道这样做是否可行,或者是否有更好的方法。

假设size在循环之前初始化为0并且input在流的开头,循环将正确地确定可以从中读取的字节数文件。

在循环区分文件结束和读取错误条件后测试 feof()。通常不需要做这个区分,所以可以去掉这个测试。

malloc(sizeof(char) * size + 1) 分配正确的字节数以将文件作为 C 字符串读取,但表达式不正确:它应该是 sizeof(char) * (size + 1) 或只是 size + 1 as sizeof(char) 根据定义是 1

请注意,您需要明确设置空终止符,因为 malloc() 不会初始化它分配的块。

另请注意,某些流(例如终端)可能无法搜索,因此如果您需要倒带流以读取字节,此方法可能会失败。

最后请注意,size 可能小于遗留系统上的文件长度,遗留系统使用 2 个字节作为行尾标记,例如 MS/DOS 和 Windows。

使用ftell()函数大小可以确定,如

fseek( input, 0, SEEK_END );
size = ftell( input);

然后设置指向文件开头的指针,

fseek( input, 0, SEEK_SET );