Программе C++ ниже не удается считать файл. Я знаю, что использование cstdio не является хорошей практикой, но что, к чему я привык и это должно работать так или иначе.
$ ls-l l.uyvy
- rw-r - r - 1 18:11 atilla atilla 614400 2010-04-24 l.uyvy
$./a.out l.uyvy
Считайте 0 байтов из 614 400, возможно неправильный файл
код:
#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;
}
, я решил проблему, инициализировав указатель. Интересно, что при чтении неинициализированного указателя происходит сбой чтения вместо выдачи segfault, что сбивает с толку.
У вас есть параметры размера и nmemb задом наперед
http://www.manpagez.com/man/3/fread/
Попробуйте вместо этого,
int bytes_read = fread (imgdata, 2*IMAGE_SIZE, 1, fp);
Кроме того, у вас нет при условии объявления буфера imgdata, вы должны быть уверены, что буфер достаточно велик - или он был правильно запрограммирован.