在C中读取文件到char数组:或者如何动态分配数组?

时间:2012-09-10 17:58:13

标签: c arrays buffer system-calls

使用Linux系统调用打开读取读取调用接受3个参数

read(File descriptor, Buffer array, Size of the buffer array);

我的问题与论点#3有关。假设我有多个文本文件要读入我的缓冲区数组。但据我所知,C不具备 Vector ArrayList 或任何其他动态大小的结构。

有没有一种简单的方法来计算文件的大小,所以我知道我应该为char数组分配多少空间?

4 个答案:

答案 0 :(得分:7)

您还可以stat()确定文件的大小,然后在其上调用mmap()。您的文件将显示为“数组”而无需malloc()内存。

答案 1 :(得分:2)

好吧,如果您使用的是Linux,则可以使用stat(2)来获取文件大小。结构stat包含一个字段st_size,表示以字节为单位的总大小。


读取内存中的整个文件真的是最好的方法吗?

答案 2 :(得分:2)

我不知道它是否合格有效,但简单地移动到文件的末尾并从那里获取长度是“容易的”:

    fseek(readf, 0, SEEK_END);
    fileLen=ftell(readf);
    buffer=(char *)malloc(fileLen);

答案 3 :(得分:1)

通常的做法是读入固定长度的缓冲区,然后将每个“记录”复制到动态分配的结构中(例如malloc()struct *或char *)。

正如cnicutar建议的那样,你也可以“统计”文件,malloc()一个大小的缓冲区,并一次读取所有文件。