Простой двоичный файл проблема ввода-вывода с cstdio (C++)

Программе 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;
}
1
задан Atilla Filiz 13 June 2010 в 09:38
поделиться

2 ответа

, я решил проблему, инициализировав указатель. Интересно, что при чтении неинициализированного указателя происходит сбой чтения вместо выдачи segfault, что сбивает с толку.

0
ответ дан 2 September 2019 в 23:48
поделиться

У вас есть параметры размера и nmemb задом наперед

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

Попробуйте вместо этого,

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

Кроме того, у вас нет при условии объявления буфера imgdata, вы должны быть уверены, что буфер достаточно велик - или он был правильно запрограммирован.

2
ответ дан 2 September 2019 в 23:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: