#define fileSize 100000
int main(int argc, char *argv[]){
char *name=argv[1];
char ret[fileSize];
FILE *fl = fopen(name, "rb");
fseek(fl, 0, SEEK_END);
long len = fileSize;
fseek(fl, 0, SEEK_SET);
//fread(ret, 1, len, fl);
int i;
*(ret+fileSize) = '\0';
for (i=0; i<fileSize; i++){
*(ret+i)=fgetc(fl);
printf("byte : %s \n", ret);
}
fclose(fl);
}
在上面的代码中,当我提供一个jpeg文件的名称时,它会在第四个字符之后读取任何内容为''...任何想法?谢谢!
答案 0 :(得分:4)
这是因为%s正在尝试打印出一个字符串。它通过查找空字符(字节值为0)来检测字符串的结尾。因此,它可能根本不打印出一个空格,而是打印出任何内容,或者是空字符串,因为它遇到一个值为0的字节。
答案 1 :(得分:1)
我倾向于同意您正在读取零字节,并建议您使用%d作为格式字符,尽管我个人更喜欢使用hex并使用
printf("byte : 0x%02X \n", ret);
但是,我有一个问题要问你。在一个如此小的程序中,为什么要问我们?我不是在讽刺,我老实地想知道为什么你自己不调试它。只需在Eclipse中构建它并逐步执行一行,Eclipse将向您显示所有局部变量的值,它应该向您跳出错误的结果。再次 - 没有违法行为。
顺便说一句,您可以找到实际的JPEG文件格式here。