代码之家  ›  专栏  ›  技术社区  ›  Jacob Nelson

将文件读取到char数组,然后读取malloc大小。(三)

  •  0
  • Jacob Nelson  · 技术社区  · 15 年前

    嘿,假设我得到一个文件作为第一个命令行参数。

    int main(int argc, char** argv) {
        unsigned char* fileArray;
    
        FILE* file1 = fopen(argv[1], "r");
    }
    

    现在我怎样才能把这个文件,一个字符一个字符地读入 char* fileArray

    基本上我怎样才能转换 FILE* char* 在我知道我需要多大的 字符*

    2 回复  |  直到 15 年前
        1
  •  2
  •   smilingthax    15 年前

    如果只使用“真实”文件(而不是流、设备…),则可以使用 stat / fstat 或者类似的

    int retval=fseek(file1,0,SEEK_END); // succeeded if ==0  (file seekable, etc.)
    long size=ftell(file1); // size==-1 would be error
    rewind(file1);
    

    预先得到文件的大小。然后你就可以读了。

        2
  •  1
  •   paxdiablo    15 年前

    您可以采取以下几种方法:

    • 指定可以处理的最大大小,然后只分配一次(无论是全局还是堆上)。
    • 如果你担心一下子把所有的文件都放进内存,就把它们分成块处理。
    • malloc 具有 realloc

    static char buff[900001];                  // or malloc/free of 900000
    count = fread (buff, 1, 900001, fIn);
    if (count > 900000)                        // problem!
    

    2号可能是最好的方法除非你绝对 需要 整个文件一下子就在记忆中。例如,如果您的程序计算字数,它可以一次按顺序处理文件几千个字。

    buffer , used max 变量。初始设置 至5万并分配 缓冲器 像那样大。

    tbuff . 把电流加起来 以及读取到的字节数 如果这比 最大值 ,做一个 增加 再增加50K(调整 最大值

    然后追加 缓冲器 ,冲洗并重复。请注意,所有这些值(10K、50K等)都只是示例。根据需要,可以使用不同的值。