gpt4 book ai didi

c - C 中的结构数组缺少数据?

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

我正在用 C 语言设计一个程序。该程序的一部分涉及从文件中读取与周期表及其元素相关的数据表,并将其放入结构中。

到目前为止,它运行得相当不错。但是,由于某种原因,当我尝试显示数组时,有几个元素没有显示,而是空白。不过,它确实出现在代码的前面。

main.c

main()
{
struct periodic *tablePtr;
tablePtr = createTable();
printf("%d\t",(tablePtr+90)//Prints "Pa" here as expected
int i;
for(i=0;i<num_elements;i++){
printf("%d\t%s\n",i,(tablePtr+90)->sym);//Prints i, but then just blank.
}


}

periodic.c(创建表)

#include "periodic.h"
#include <stdio.h>

struct periodic *createTable(){

char format[] ="%d\t%s[3]\t \
%s[20]\t%f\t \
%s[100]\t%f\t \
%d\t%f\t%d\t \
%d\t%d\t%s[20]\t \
%s[7]\t%s[17]\t \
%d\t%d\t%f\t \
%s[40]\n)";


struct periodic period_table[num_elements];
struct periodic *tablePtr = period_table;
FILE *fp;
fp = fopen("periodictable.csv","r");

char buff[200];

struct periodic *initPtr = tablePtr;
while(fgets(buff,sizeof(buff),fp)){
sscanf(buff,format,&(tablePtr->num),&(tablePtr->sym),&(tablePtr->name),&(tablePtr->weight),&(tablePtr->config),&(tablePtr->neg),&(tablePtr->ion_rad),&(tablePtr->vdW_rad),&(tablePtr->IE_1),&(tablePtr->EA),&(tablePtr->oxi_st),&(tablePtr->stn_st),&(tablePtr->melt),&(tablePtr->boil),&(tablePtr->dens),&(tablePtr->type));
tablePtr++;
}

fclose(fp);
return initPtr;

}

我可以根据需要提供更多信息。

最佳答案

你有:

struct periodic *tablePtr = period_table;

这里,tablePtr指向函数中本地定义的数组。然后从函数返回tablePtr。当函数返回时,数组被销毁。因此,调用函数有一个悬空指针。

引用悬空指针会导致未定义的行为。

您需要从堆中分配内存,返回指向动态分配内存的指针,并在调用函数中释放内存。

struct periodic *tablePtr = malloc(sizeof(*tablePtr)*num_elements);

并在main中调用

free(tablePtr);

在函数结束之前。

此外,向 main 添加显式返回类型。

int main() 
{
...
}

关于c - C 中的结构数组缺少数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35836714/

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