C++ fwrite()写的比预期多

fwr*_*Err 3 c fwrite

复制文件时遇到问题

码:

    bool done;
    FILE* fin;
    FILE* fout;
    const int bs = 1024*64;//64 kb
    char* buffer[bs];
    int er, ew, br, bw;
    long long int size = 0;
    long long int sizew = 0;
    er = fopen_s(&fin,s.c_str(),"rb");
    ew = fopen_s(&fout,s2.c_str(),"wb");
    if(er == 0 && ew == 0){
        while(br = fread(buffer,1,bs,fin)){
            size += br;
            sizew += fwrite(buffer,1,bs,fout);
        }
        done = true;
    }else{
        done = false;
    }
    if(fin != NULL)fclose(fin);
    if(fout != NULL)fclose(fout);
Run Code Online (Sandbox Code Playgroud)

以某种方式fwrite写入整个缓冲区忽略计数值(br)

一些例子如何:

Copying 595 file of 635 DONE. 524288/524288 B
Copying 596 file of 635 DONE. 524288/524288 B
Copying 597 file of 635 DONE. 65536/145 B
Copying 598 file of 635 DONE. 65536/16384 B
Copying 599 file of 635 DONE. 65536/145 B
Copying 600 file of 635 DONE. 65536/67 B
Copying 601 file of 635 DONE. 65536/32768 B
Copying 602 file of 635 DONE. 65536/67 B
Run Code Online (Sandbox Code Playgroud)

谁知道问题出在哪里?

Lig*_*ica 7

忽略计数值(br)

其实你写的bs.

变量命名差的危险的一个很好的例子!


Sti*_*sis 5

你应该做

        sizew += fwrite(buffer,1,br,fout);
Run Code Online (Sandbox Code Playgroud)

你过去了bs,这fread是允许阅读的最大金额.brfread实际读取的金额.