fread 在处理二进制文件时得到的字符比我在 c 中要求的字符多

fread gets more chars than i ask in c while working with binary file

我是 C 的初学者,在实习期间我必须使用二进制文件,我必须读取二进制文件中的信息,一次一个信息,

int main()
{
FILE *ptr=fopen("C:\Users\Workstation\Desktop\TEST.MAILO","rb");

char header[65];
char CRLF[3];
char first40[41];
char rio[33];
char date_capture[9];


if (ptr==NULL){
    printf("Erreur");
exit(EXIT_FAILURE);
}

fread(header, sizeof(char), 64, ptr);
fread(CRLF, sizeof(char), 2, ptr);
fread(first40,sizeof(char),40,ptr);
fread(rio,sizeof(char),32,ptr);
fread(date_capture,sizeof(char),8,ptr);

printf("%s%s",header,CRLF);
printf("%s|||%s|||",first40,rio);
printf("%s||",date_capture);

return 0;
}

问题是在最后一个变量 "date_capture" 中,我要求 8 个字符作为日期,但结果超过了 8 个

EIMG05050120170609007MADIMC0500014 0310000032050810011010358897200120007780|||007MAD00901020170609000109259941|||20170608■007MAD00901020170609000109259941||=[=121=]

它应该只打印 20170608 而没有其余的 ■007MAD00901020170609000109259941|| 请帮帮我,我到处都找遍了,没有发现这样的问题。谢谢

fread 不会空终止传递给它的缓冲区,您会看到额外的字符,因为 date_capture 中的数据不是空终止的,您应该调用 memset 来设置 date_capture 在传递给 fread

之前全为零

从文件中获取的字节数不超过 8 个。 fread 不会向您的缓冲区添加任何字符串终止符。尝试自己添加或将缓冲区全部初始化为 0。