Чтение буфера данных из формы fread() в c

Я пытаюсь извлечь данные из файла и сохранить его непосредственно в массиве из функции Fread. Тем не менее, похоже, что тип данных неверен?

Вот сообщение об ошибке:

dataPlus.c: 28: 15: ошибка: несовместимое преобразование целочисленного значения в указатель, передающее 'int' параметру типа 'void *' [-Werror,-Wint-translation] fread(ptr[i], 1, 1, in);

Как я могу сделать эти данные доступными? Например, если я хочу проверить, являются ли первые 3 символа в текстовых файлах 1, 2 и 3.

/**
 * To store specific lines of data from fread into array.
 * Alternatively, to make the buffer recieved from fread, readible
 **/

#include <stdio.h>

int main(void)
{

FILE* in = fopen("in.txt", "r");

if (in == NULL)
{
    printf("File does not exist.\n");
    return 1;
}


FILE* out = fopen("out.txt", "w");

//read file information into array.
int ptr[4];

//error here... Tried to store it directly into array instead of buffer..
    for(int i = 0; i < 4; i++)
    {
        fread(ptr[i], 1, 1, in);
    }


    for(int j = 0; j < 4; j++)
    {
        printf("success. Array[%i] is --> %i value\n", j, ptr[j]);
    }

fclose(in);
fclose(out);
}

2 ответа

Решение

В С указатели и массивы практически одинаковы, поэтому int ptr[4]; означает, что у вас есть массив из 4 целых чисел, и вы можете получить к ним доступ, используя обычные обозначения (например, ptr[3] = 2;) или, с указанием арифметики, *(ptr+3) = 2;, который делает то же самое.

Функция fread() ожидает некоторый указатель, поэтому вы должны дать ему адрес, в вашем случае адрес (оператора &) i-й элемент массива, например fread(&(ptr[i]), 1, 1, in); или же fread(ptr + i, 1, 1, in);

Ошибка компилятора говорит именно об этом, вы даете функции целое число вместо указателя.

int ptr[4]; это массив интригеров, поэтому ptr[i] является интригером.

Если вам нужен массив указателей, это путь

int *(ptr)[4], поэтому ptr[i] является указателем.

Другие вопросы по тегам