可能重复:
如何在 C 中获取文件的大小?
我在 C 中有一个函数,它正在从文本文件中读取未知数量的行。我正在将行中的数据插入到struct
我拥有的数据中。每一行我都在增加结构的大小realloc
。一切都很好,但是该函数会返回 thisstruct
并且应该插入到struct
程序的“main”中。从我的思维方式来看,它不应该起作用,而且它也不起作用。我不知道应该为 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
- 常量 - 多边形的点数。
在数组的第一个单元格中 -> rec.[0].poly.points[0].x
- 这是我应该保存RECORD
数组中实际 s 数量的地方,所以我开始从 [1] 填充它。
基本上我要做的是在 中创建一个,array
然后使用一个函数从文件中读取,该函数创建另一个未知大小的数组并返回(数组)的指针。RECORD
main()
RECORD
简单的方法是将指针数组从主函数发送到函数并且不返回任何内容(void),但我不得不使用这个原型。