我正在尝试从文件中提取数据并将其直接存储在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);
}
答案 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]是一个指针。