Чтение буфера данных из формы 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] является указателем.