gpt4 book ai didi

c - 从带有指针的函数返回更大类型的日期

转载 作者:行者123 更新时间:2023-11-30 17:55:07 25 4
gpt4 key购买 nike

Possible Duplicate:
How can I get a file’s size in C?

我有一个 C 函数,它从文本文件中读取未知数量的行。我正在将数据从该行插入到 struct我有。每行我都用 realloc 增加结构的大小。一切都很好,但是函数返回这个 struct并应插入“main”struct的程序。按照我的想法,这不应该行得通,而且也行不通。我不知道应该给主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

附注如果我做 malloc共 10 行,文件中有 5 行,它正在工作(正如我所期望的)。

谢谢

编辑:我正在构建的这个程序是为学校准备的,我得到了读取函数的原型(prototype),它只返回结构并获取指向文件的指针。所以我无法发送更多变量。

编辑 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 - 这是我应该保存实际上 RECORD 的数字的地方s 在数组中,所以我开始从 [1] 开始填充它。

基本上我想做的是创建一个 arrayRECORDmain()然后使用函数读取文件,该函数创建另一个未知大小的数组并返回 RECORD 的指针(数组)。

最简单的方法是将指针数组从主函数发送到函数并且不返回任何内容(void),但我不得不使用这个原型(prototype)。

最佳答案

您需要将“old z”传递给您的函数,然后使用“realloc” - 您还需要一个“当前计数”,以便您知道要扩展到什么大小:

int* blah(int *old, int* count)
{
int *x;
*count += 3; // add three to count, as we are adding three elemnts
x=realloc(old, sizeof(int)*count);
if (!x) {
free(old); // Prevent leaking the "old" pointer.
allocation_failed(); // Do something if this goes wrong!
}
x[count-3]=1;
x[count-2]=2;
x[count-1]=3;
return x;
}

int main()
{
int *z = NULL; // initialize z to NULL so we can start from "empty".
int i;
int count = 0;
z = blah(z, &count);
z = blah(z, &count);
for(i = 0; i < count; i++)
printf("%d\n", z[i]);
return 0;
}

如您所见,我传递了一个指向 count 的指针,这样我们就可以更新每次调用 blah 的计数。

显然还有很多其他方法可以解决这个问题。

关于c - 从带有指针的函数返回更大类型的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14536797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com