当前位置:  开发笔记 > 编程语言 > 正文

在c中将文本文件读入数组

如何解决《在c中将文本文件读入数组》经验,为你挑选了2个好方法。

将文本文件读入动态一维数组的最有效方法是什么?在每次读取char之后重新分配似乎很愚蠢,在每个读取行之后重新分配似乎不太好.我想将整个文件读入数组.你会怎么做?



1> Johannes Sch..:

我不太明白你想要什么.你想逐步处理文件,从中读取一行,然后放弃它并处理下一行吗?或者您想将整个文件读入缓冲区?如果你想要后者,我认为这是合适的(检查malloc的NULL返回和实际代码中的fopen是否存在文件以及是否有足够的内存):

FILE *f = fopen("text.txt", "rb");
fseek(f, 0, SEEK_END);
long pos = ftell(f);
fseek(f, 0, SEEK_SET);

char *bytes = malloc(pos);
fread(bytes, pos, 1, f);
fclose(f);

hexdump(bytes); // do some stuff with it
free(bytes); // free allocated memory



2> philant..:

如果您的系统上有mmap(2),则可以打开该文件并将其映射到内存中.这样,你没有内存可以分配,你甚至不必读取文件,系统就会这样做.你可以使用litb给出的fseek()技巧来获得大小.

void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);

编辑:你必须用来lseek()获取文件的大小,.

int fd = open("filename", O_RDONLY);
int nbytes = lseek(fd, 0, SEEK_END);
void *content = mmap(NULL, nbytes, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有