gpt4 book ai didi

c - C中结构体数组的静态分配

转载 作者:行者123 更新时间:2023-11-30 18:52:37 24 4
gpt4 key购买 nike

我相信声明结构student的数组record,具有另一个结构的数组( StudentData)作为成员,将为所有成员自动分配静态内存。然而这个程序崩溃了[行record[2].percentage = 81.5;]中的段错误(核心转储)

换句话说,我相信对于record[0],我会静态分配 sizeof(int)、sizeof(float) 和一个 30 个 220 字节的数组(每个为 20 个字节) >名称和地址为200)。即使调试器也证实了这个假设,但是程序崩溃了。

我想知道我做错了什么,或者我是否错过了对 C 中结构数组的静态分配或其他内容的理解。

我正在使用 gcc。

谢谢!

#include <stdio.h>;
#include <string.h>;

typedef struct StData{
char name[20];
char address[200];
} StData;

struct student{
int id;
struct StData StudentData[30];
float percentage;
};

void tgin_ini(struct StData tgin[],int tgin_size){
int n;

for(n=0;n<tgin_size;++n){
tgin[n].name[0] = '\0';
tgin[n].address[0] = '\0';
}
}

int main(){
int i,n;
struct student record[2];

for(n=0;n<2;++n){
record[n].id=1;
record[n].percentage = 86.5;
tgin_ini(record[n].StudentData,30);
}


// 1st student's record
record[0].id=1;
strcpy(record[0].StudentData[0].name, "Raju");
strcpy(record[0].StudentData[0].address, "Planet earth, island called america");
record[0].percentage = 86.5;

// 2nd student's record
record[1].id=2;
strcpy(record[1].StudentData[1].name, "Surendren");
strcpy(record[1].StudentData[1].address, "Planet earth, island called europa");
record[1].percentage = 90.5;

// 3rd student's record
record[2].id=3;
strcpy(record[2].StudentData[2].name, "Thiyagu");
strcpy(record[2].StudentData[2].address, "Planet earth, island called asia");
record[2].percentage = 81.5;

for(i=0; i<3; i++)
{
printf(" Records of STUDENT : %d \n", i+1);
printf(" Id is: %d \n", record[i].id);
printf(" Name is: %s \n", record[i].StudentData[i].name);
printf(" Name is: %s \n", record[i].StudentData[i].address);
printf(" Percentage is: %f\n\n",record[i].percentage);
}
return 0;
}

最佳答案

record[2]访问 record 的第三个元素,它只有两个元素,如声明的 struct student record[2]; 。要么将其更改为 struct student record[3];这样您就有所需的空间,或者更改代码以只有两名学生。

关于c - C中结构体数组的静态分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34640094/

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