读取缓冲区数据形成c中的fread()

时间:2016-11-30 18:38:00

标签: c arrays buffer cs50

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

以下是错误消息:

  

dataPlus.c:28:15:错误:指针转换不兼容的整数   通过         'int'到'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);
}

2 个答案:

答案 0 :(得分:1)

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

函数fread()需要某种指针,所以你必须给它一个地址,在你的情况下,地址为(operator &)数组中的第i个元素,比如fread(&(ptr[i]), 1, 1, in);fread(ptr + i, 1, 1, in);

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

答案 1 :(得分:1)

int ptr [4];是一系列的intrigers,所以ptr [i]是一个intriger。

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

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