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。
我是 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。