代码之家  ›  专栏  ›  技术社区  ›  Atilla Filiz

具有CSTDIO(C++)的简单二进制文件I/O问题

  •  1
  • Atilla Filiz  · 技术社区  · 15 年前

    下面的C++程序无法读取文件。我知道使用CSTDIO并不是一个好的实践,但我已经习惯了这一点,它无论如何都应该有效。

    $LL L.UyWy

    -RW-R--R--1阿蒂拉·阿蒂拉614400 2010-04-24 18:11 L.Uyvy

    美元/a.out l.uvy

    从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 回复  |  直到 15 年前
        1
  •  2
  •   Tim Kane    15 年前

    你已经把大小和大小的参数放在前面了。

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

    试试吧,

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

    另外,您还没有为imgdata缓冲区提供声明,您需要确保缓冲区足够大,或者malloc已经正确。

        2
  •  0
  •   Atilla Filiz    15 年前

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