0

您好,我在从文件中填充数组时遇到问题。我第一次运行我的 nacitaj 函数时效果很好。但是在我再次调用它之后,输出值很疯狂。有没有办法告诉程序在多次调用 nacitaj 函数后覆盖 suma[] 中的值?

int nacitaj(float *suma, int *k) {
FILE *fr;
int i=0;
int j=1;
int o=1;
char p[30];
j=*k;


if ((fr = fopen("FILE.TXT","r")) == NULL){
    printf("NULL\n");
}
else {
    while(feof(fr) == 0){
        fgets(p,30,fr);
        fgets(p,30,fr);
        fgets(p,30,fr);
        fgets(p,30,fr);
        fgets(p,30,fr);
        i++;
    }

    suma=((float*)malloc(i*sizeof (float))); 
    rewind(fr);

    while(feof(fr) == 0){
        fgets(p,30,fr);
        fgets(p,30,fr);
        fgets(p,30,fr);
        fscanf(fr,"%f\n", &suma[j]);
        fgets(p,30,fr);
        fgets(p,30,fr);
        j++;

    }

}
*k=j;
fclose(fr);
return suma;
}

主要的

if(c=='N'){
            suma=nacitaj(suma,&k);
        }

我试着做

suma=((float*)malloc(0*sizeof (float)));

在开始,但它使情况变得更糟。

4

1 回答 1

0

在第二次调用我的函数时,我仍然必须弄清楚如何重新分配我的数组。

再次调用该函数时,您已经使用相同的语句重新分配数组(此外,它还有许多不可爱的括号和类型转换)。

    suma=((float*)malloc(i*sizeof (float)));

您可能正在寻找的是如何在不再需要数组时取消分配。

    free(suma);
于 2014-06-18T12:57:25.073 回答