为什么这段代码会在第4个字符之后读取所有内容?

时间:2010-04-07 01:53:21

标签: c string file image-processing

#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文件的名称时,它会在第四个字符之后读取任何内容为''...任何想法?谢谢!

2 个答案:

答案 0 :(得分:4)

这是因为%s正在尝试打印出一个字符串。它通过查找空字符(字节值为0)来检测字符串的结尾。因此,它可能根本不打印出一个空格,而是打印出任何内容,或者是空字符串,因为它遇到一个值为0的字节。

答案 1 :(得分:1)

我倾向于同意您正在读取零字节,并建议您使用%d作为格式字符,尽管我个人更喜欢使用hex并使用

  printf("byte : 0x%02X \n", ret);

但是,我有一个问题要问你。在一个如此小的程序中,为什么要问我们?我不是在讽刺,我老实地想知道为什么你自己不调试它。只需在Eclipse中构建它并逐步执行一行,Eclipse将向您显示所有局部变量的值,它应该向您跳出错误的结果。再次 - 没有违法行为。

顺便说一句,您可以找到实际的JPEG文件格式here