重複の可能性:
C でファイルのサイズを取得するにはどうすればよいですか?
テキスト ファイルから不明な数の行を読み取る C の関数があります。私は行からstruct
私が持っているにデータを挿入しています。各行で、構造体のサイズを増やしていrealloc
ます。すべて問題ありませんが、関数はこれを返し、プログラムのstruct
「メイン」struct
に挿入する必要があります。私の考え方では、うまくいかないはずですし、うまくいきません。main にどのくらいのスペースを割り当てる必要があるのか わかりません。struct
それから、より大きな を比較しようとしていstruct
ます。
コードは非常に長いですが、これは私が基本的に行っていることです:
int* blah()
{
int *x;
x=(int*)malloc(sizeof(int)*3);
x[0]=1;
x[1]=2;
x[3]=3;
return x;
}
int main()
{
int *y, *z;
y=(int*)malloc(sizeof(int)*1);
z=y;
z = blah();
return 0;
}
をどれだけ増やすべきかをどうやって知ることができy
ますか?
ps malloc
10 を実行していて、ファイルに 5 行ある場合、(予想どおり) 動作しています。
ありがとう
編集: 私が構築しているこのプログラムは学校向けであり、読み取り関数のプロトタイプが与えられ、構造体を返し、ファイルへのポインターを取得するだけです。そのため、これ以上変数を送信できません。
編集 2: 構造体:
typedef struct
{
int x;
int y;
}POINT;
typedef struct
{
POINT points[SHAPE_TYPE];
}POLIGON;
typedef struct
{
POLIGON poly;
float sides[SHAPE_TYPE];
}RECORD;
読み取り機能:
RECORD* Read(FILE* F)
{
RECORD* rec;
int i=1,j;
rec = (RECORD*)malloc(PACK*sizeof(RECORD));
if (rec == NULL)
{
exit(1);
}
rec[0].poly.points[0].x=0;
if(F == NULL)
{
printf("Could not open a file for reading. Exiting....\n");
exit(1);
}
while (!feof(F))
{
if(rec[0].poly.points[0].x==(sizeof(*rec)/sizeof(RECORD)-1))
rec = (RECORD*)realloc(rec,((sizeof(*rec)/sizeof(RECORD))+PACK)*sizeof(RECORD));
if (rec == NULL) {
exit(1);
}
for(j=0; j<SHAPE_TYPE; j++)
fscanf(F, "%d,%d,%f,",&rec[i].poly.points[j].x,&rec[i].poly.points[j].y,&rec[i].sides[j]);
fscanf(F,"\n");
rec[0].poly.points[0].x=i;
i++;
}
fclose(F);
return rec;
}
私はそれを次のように呼びます:
RECORD* rec,p;
FILE *f;
rec = (RECORD*)malloc(PACK*sizeof(RECORD));
p=rec;
f=NULL;
f = fopen("Save.txt", "r");
p = Read(f);
グローバル変数が使えません。
PACK
-定数番号。この数で配列を増やす必要があります。
SHAPE_TYPE
- Const - ポリゴンが持つポイントの数。
配列の最初のセル -> rec.[0].poly.points[0].x
- これは、配列内の実際の s の数を保存する場所RECORD
なので、[1] から入力し始めます。
基本的に私がやろうとしているのは、に of を作成し、別array
の未知のサイズの配列を作成して(array)のポインターを返す関数を使用してファイルから読み取ることです。RECORD
main()
RECORD
簡単な方法は、ポインター配列をメインから関数に送信し、何も返さない (void) ことですが、このプロトタイプを使用することを余儀なくされました。