Ожидание, брошенное на "fopen" - PullRequest
0 голосов
/ 21 января 2019

Я написал функцию для чтения двоичного файла.При выполнении отладки в строке "pFile = fopen (filename," rb ");" показывалось "исключение".Я не знаю почему.Также как вернуть буфер чтения в функцию "read_back (const char * filename)"

void read_back(const char *filename)
{
    FILE* pFile;
    long lSize=100;
    char* buffer;
    buffer = (char*)malloc(sizeof(char)*lSize);
    pFile = fopen(filename, "rb");
    if (pFile == NULL) { fputs("File error", stderr); exit(1); }

    // copy the file into the buffer:
    size_t result = fread(buffer, 1, lSize, pFile);
    if (result != lSize) { fputs("Reading error", stderr); exit(3); }
       fclose(pFile);   
}

int main() 
{
    const char *fname[2];
    fname[1] = "C:\\1_data.bin";
    fname[2] = "C:\\2_data.bin";
    fname[3] = "C:\\3_data.bin";

    for (int i = 0; i < 2; ++i) 
    {
        read_back(fname[i]);
    }
    return 0;
}

1 Ответ

0 голосов
/ 21 января 2019

Несколько ошибок в вашем коде.

Прежде всего индекс массива начинается с 0. fname - это массив 2 char *, и вы пропустили инициализацию fname[0]. Более того, вы инициализируете массив после конца массива - fname[2] и fname[3]. Так как ваша программа должна читать три файла, вы должны сделать:

    const char *fname[3];
    fname[0] = "C:\\1_data.bin";
    fname[1] = "C:\\2_data.bin";
    fname[2] = "C:\\3_data.bin";

Измените условие цикла на i < 3.

В read_back() вы устанавливаете lSize на 100 и ниже в коде, который вы делаете

if (result != lSize) { fputs("Reading error", stderr); exit(3); }

Это означает, что файл для чтения должен иметь количество байтов, считанных fread(), либо 100 или более, иначе это Reading error. Кроме того, если файл имеет более 100 байтов, то, кроме первых 100 байтов, он будет непрочитанным. Можете ли вы вызвать fread() в цикле и прочитать до конца файла.

...