fread获取更多的字符比我在c中问的同时使用二进制文件
我是C的初学者,在我的实习中,我必须使用二进制文件,我必须读取二进制文件中的信息,一时间,fread获取更多的字符比我在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” 我问8chars的日期,但它得到超过8
EIMG05050120170609007MADIMC0500014 0310000032050810011010358897200120007780 ||| 007MAD00901020170609000109259941 ||| 20170608 ■007MAD00901020170609000109259941 ||
它应该只打印20170608而不打印其他■007MAD00901020170609000109259941 || 请帮我看看到处我还没有发现任何问题。 THANK YOU
fread
不会空结束传递给它的缓冲区,你看到多余的字符作为date_capture
数据没有空值终止的,你应该叫memset
事先设定date_capture
为全零到它传递给FREAD
fread文档:'The返回成功读取的元素总数“,因此可以很容易地在正确的位置添加NUL来终止缓冲区中的TEXT字符串。 –
它没有超过8个字节的文件。 fread
不会将任何字符串终止符添加到您的缓冲区。尝试自己添加或初始化您的缓冲区全部为0.
fread docs:'成功读取的元素总数被返回',所以很容易在正确的位置添加NUL以终止缓冲区中的TEXT字符串。 –
在''fread(date_capture,sizeof(char),8,ptr);''add'' date_capture [8 + 1] ='\ 0' ;'' – Neil
'fread()'不知道传递给它的参数的性质,它将它视为'void *'。它知道的只是读取文件中指定的一些字节并将它们写入缓冲区。 – WhiteSword
所以,显然假设它会将一个空字符添加到你的char数组中是不对的。你也应该检查它的文档。 – WhiteSword