아래의 C++ 프로그램이 파일을 읽지 못했습니다. 나는 cstdio를 사용하는 것이 좋은 습관이 아니라는 것을 압니다.하지만 익숙한 것은 어쨌든 작동해야합니다.간단한 바이너리 cstdio (C++) 파일 I/O 문제
$ 1! -l l.uyvy
-rw-R - r--로 1 개 아틸라의 아틸라 리터 ./a.out 614,400 2010-04-24 18시 11분 l.uyvy
$ 아마도 잘못된 파일, 614,400 밖으로
읽기 0 바이트를 .uyvy
코드 : 당신은 다시 매개 변수를 가지고
#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;
}
버퍼를 제공해야한다는 것을 알게되면 혼란스럽지 않습니다. 'fread'는 버퍼를 생성하지 않습니다. 실제로 모든 단일 파일 작업에 새 버퍼가 할당되기를 원하지 않기 때문에 실제로 좋은 것입니다. 아주 자주, 같은 버퍼를 몇 번이고 다시 사용할 수 있습니다. (성능을 생각하십시오!) - 최종 힌트로써, 당신의 경우에, 고정 크기 버퍼로서'imgdata '를 초기화하지 않도록하십시오. 읽고있는 파일의 크기에 따라 초기화해야합니다. 파일 크기는'fseek (fp, 0, SEEK_END);와'long fileSize = ftell (fp);'를 호출하여 얻을 수 있습니다. – stakx