我有一个大文本文件,其中包含每行 7000 个 512 位的条目,我想读取每一行并将其存储到一个 char 数组中,以便我可以进行位操作。
有什么推荐和有效的方法吗?
我会加载整个文件,然后将每个 512 位块的指针指向内存中的文件。
但是,如果您想要更好的答案,则需要提供更多信息。
char **load_file(const char *filename) {
size_t i, j, file_size;
char *file_ptr;
char **entries;
FILE *fd;
fd = fopen(filename, "r");
fseek(fd, 0, SEEK_END);
file_size = ftell(fd);
rewind(fd);
file_ptr = malloc(sizeof(char) * file_size);
fread(file_ptr, file_size, 1, fd);
fclose(fd);
/* 64 + 1 because newline is a character */
entries = malloc(sizeof(char *) * file_size/(64 + 1));
for (i = j = 0; j < file_size; i++, j += 64 + 1) {
entries[i] = &file_ptr[j];
}
return entries;
}
如果您提供了自己的假设或代码,那么我可以更好地指导我的答案,但是这里是您问题的通用答案...
您可以使用fgets
(此处的文档)读取每个精益上的字节并使用按位运算来访问每个单独的位。请注意,您可以从中fgets
读取,stdin
以便您可以将文件通过管道传输到您的程序(或使用文件读取库来处理它)。
对于字符数组,我建议使用动态数组,而不是有限数组。如果您设置有限数组,则将其存储在内存池(而不是堆栈)中,因为堆栈容易被大文件溢出(调用堆栈的大小取决于您使用的体系结构)。