cstdio的简单二进制文件I / O问题(c ++)

时间:2010-06-13 09:38:13

标签: c++ file-io stdio fread

下面的c ++程序无法读取该文件。我知道使用cstdio并不是一种好的做法,但是我习以为常,无论如何都应该有效。

$ ls -l l.uyvy

-rw-r - r-- 1 atilla atilla 614400 2010-04-24 18:11 l.uyvy

$ ./a.out l.uyvy

从614400中读取0个字节,可能是错误的文件

代码:

#include<cstdio>
int main(int argc, char* argv[])
{
    FILE *fp;

    if(argc<2)
    {
            printf("usage: %s <input>\n",argv[0]);
            return 1;
    }

    fp=fopen(argv[1],"rb");
    if(!fp)
    {
            printf("erör, cannot open %s for reading\n",argv[1]);
            return -1;
    }
    int bytes_read=fread(imgdata,1,2*IMAGE_SIZE,fp); //2bytes per pixel
    fclose(fp);
    if(bytes_read < 2*IMAGE_SIZE)
    {
            printf("Read %d bytes out of %d, possibly wrong file\n",
                 bytes_read, 2*IMAGE_SIZE);
            return -1;
    }
    return 0;
}

2 个答案:

答案 0 :(得分:2)

你有大小和nmemb

的参数

http://www.manpagez.com/man/3/fread/

尝试改为,

int bytes_read = fread (imgdata, 2*IMAGE_SIZE, 1, fp);

另外,你没有提供imgdata缓冲区的声明,你要确保缓冲区足够大 - 或者已经正确地进行了malloc。

答案 1 :(得分:0)

我通过初始化指针解决了这个问题。有趣的是,当你试图读入未初始化的指针时,读取失败而不是给出段错误,这令人困惑。