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

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

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

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 

如果您的系统上有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); 

如果要使用ISO C,请使用此function 。

这是litb的答案,包含一些error handling……