1

以下の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;
}
4

2 に答える 2

2

サイズとnmembのパラメータが前後にあります

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

代わりに試してください

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

また、imgdataバッファーの宣言を指定していない場合は、バッファーが十分に大きいこと、または正しくmallocされていることを確認する必要があります。

于 2010-06-13T09:48:15.123 に答える
0

ポインタを初期化することで問題を解決しました。興味深いことに、初期化されていないポインタに読み込もうとすると、セグメンテーション違反が発生する代わりに読み取りが失敗し、混乱を招きました。

于 2010-06-13T09:52:50.803 に答える