Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中读取二进制数据块直到EOF?_C_Binaryfiles_Fread - Fatal编程技术网

如何在C中读取二进制数据块直到EOF?

如何在C中读取二进制数据块直到EOF?,c,binaryfiles,fread,C,Binaryfiles,Fread,我试图学习二进制读取数据块,而不是逐个读取值。我成功地读取了包含N字节数据的块,但如果最后一个块不是N字节,则由于while条件,数据将丢失 #include<stdio.h> #include<stdlib.h> int main(){ int buffer[512]; FILE *data = fopen("new_file.bin","rb"); while( fread(&buffer,sizeof(int),51

我试图学习二进制读取数据块,而不是逐个读取值。我成功地读取了包含N字节数据的块,但如果最后一个块不是N字节,则由于while条件,数据将丢失

#include<stdio.h>
#include<stdlib.h>

int main(){
int buffer[512];
FILE *data = fopen("new_file.bin","rb");
while( fread(&buffer,sizeof(int),512,data) )
{
... do something
}
return 0;
}
#包括
#包括
int main(){
int缓冲区[512];
FILE*data=fopen(“new_FILE.bin”、“rb”);
while(fread(&buffer,sizeof(int),512,data))
{
…做点什么
}
返回0;
}

例如,如果下一个块是400字节,则不会使用来自该块的数据。知道如何读取所有数据直到EOF吗?

您应该读取N个1字节的块,而不是读取N个字节的块

#include<stdio.h>
#include<stdlib.h>

#define N 2048

int main(){
    char buffer[N];
    FILE *data = fopen("new_file.bin","rb");
    size_t size_read;
    while( (size_read = fread(buffer,1,N,data)) > 0 )
    {
        ... do something
    }
    return 0;
}
#包括
#包括
#定义N 2048
int main(){
字符缓冲区[N];
FILE*data=fopen(“new_FILE.bin”、“rb”);
大小\u t大小\u读取;
而((size_read=fread(缓冲区,1,N,数据))>0)
{
…做点什么
}
返回0;
}

如果下一个块是400字节,
fread
将读取它并返回
100
(32位
int
)。但您必须存储其返回值以了解读取了多少个元素,这样您就可以对它们“做点什么”。