在c中从fread()读取缓冲区数据

Reading buffer data form fread() in c

我正在尝试从文件中提取数据并将其直接存储在 fread 函数的数组中。但是,数据类型似乎不正确?

错误信息如下:

dataPlus.c:28:15: error: incompatible integer to pointer conversion passing 'int' to parameter of type 'void *' [-Werror,-Wint-conversion] 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);
}

在 C 中,指针和数组完全相同,因此 int ptr[4]; 表示您有一个包含 4 个整数的数组,您可以使用通常的表示法(例如 ptr[3] = 2;)访问它们,或者,使用指针算法,*(ptr+3) = 2;,做同样的事情。

函数fread()需要某种指针,所以你必须给它一个地址,在你的例子中是(operator &)中的i:th元素的地址数组,例如 fread(&(ptr[i]), 1, 1, in);fread(ptr + i, 1, 1, in);

编译器错误就是这样说的,你给函数一个整数而不是一个指针。

int ptr[4];是一个 intrigers 数组,所以 ptr[i] 是一个 intrigers.

如果你需要一个指针数组,就是这样

int *(ptr)[4] 所以 ptr[i] 是一个指针。