2016-11-30 12 views
1

私はファイルからデータを抽出し、fread関数の配列に直接格納しようとしています。しかし、データ型が間違っているようですね?ここで fread()in cを読み取る

はエラーメッセージです:

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であれば、およびCポインタと配列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); 
} 

答えて

1

は全く同じなので、int ptr[4];あなたは、配列を有することを意味します通常の表記法(例えばptr[3] = 2;)を使用してアクセスするか、ポインタ演算で同じことを行う*(ptr+3) = 2;を使用してアクセスできます。

機能fread()はいくつかの種類のポインタを期待ので、あなたの場合には、それを(オペレータ&)、iのアドレスアドレスを与えなければならない:fread(&(ptr[i]), 1, 1, in);fread(ptr + i, 1, 1, in);

のように、配列内の番目の要素をコンパイラのエラーはちょうどこれを言っています、ポインタの代わりに整数に関数を渡しています。

1

int ptr [4]; intrigersの配列なので、ptr [i]はintrigerです。

あなたはポインタの配列が必要な場合は、これは

のint *(PTR)の方法である[4]ので、[i]はポインタであるptrを。

関連する問題