从文件中读取位并将其存储到C中的字符数组中

从文件中读取位并将其存储到C中的字符数组中,c,arrays,file,bits,C,Arrays,File,Bits,我有一个大的文本文件,它由7000个条目组成,每行512位,我想读取每一行并将其存储到一个字符数组中,这样我就可以进行位操作 有什么推荐和有效的方法吗?如果您提供了自己的假设或代码,那么我可以更好地直接给出我的答案,不过这里是您问题的一般答案 您可以使用fgets(文档)读取每个lean上的字节,并使用逐位操作访问每个位。注意:您可以让fgets从stdin读取文件,这样您就可以通过管道将文件传输到您的程序(或者使用文件读取库来处理它) 对于字符数组,我建议使用动态数组,而不是有限数组。如果设

我有一个大的文本文件,它由7000个条目组成,每行512位,我想读取每一行并将其存储到一个字符数组中,这样我就可以进行位操作


有什么推荐和有效的方法吗?

如果您提供了自己的假设或代码,那么我可以更好地直接给出我的答案,不过这里是您问题的一般答案


您可以使用
fgets
(文档)读取每个lean上的字节,并使用逐位操作访问每个位。注意:您可以让
fgets
stdin
读取文件,这样您就可以通过管道将文件传输到您的程序(或者使用文件读取库来处理它)


对于字符数组,我建议使用动态数组,而不是有限数组。如果设置为使用有限数组,则将其存储在内存池(而不是堆栈)中,因为堆栈容易被大文件溢出(调用堆栈的大小取决于您使用的体系结构)。

我将加载整个文件,然后将指向内存中文件的每个512bit块的指针

然而,如果你想要一个更好的答案,你需要提供更多的信息


char**load_文件(const char*filename){
大小i,j,文件大小;
字符*文件\u ptr;
字符**条目;
文件*fd;
fd=fopen(文件名,“r”);
fseek(fd,0,SEEK_END);
文件大小=ftell(fd);
倒带(fd);
文件大小=malloc(sizeof(char)*文件大小);
fread(文件ptr,文件大小,1,fd);
fclose(fd);
/*64+1,因为换行符是字符*/
条目=malloc(sizeof(char*)*文件大小/(64+1));
对于(i=j=0;j
7000行x64字节<500000字节,甚至不到1/2MB。这通常不被认为是“大”。
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;
}