如何使用malloc为char name[50];
分配内存我不知道这些概念是c
的新概念。
struct student
{
char name[50];
int roll;
float marks;
};
int main()
{
int c;
printf("no. of students\n");
scanf("%d",&c);
struct student *s;
s=(struct student *) malloc (sizeof(struct student));
int i;
printf("\nstudents information:\n");
for(i=0;i<c;++i)
{
printf("enter the name:");
scanf("%s",s[i].name);
printf("enter roll no:");
scanf("%d",&s[i].roll);
printf("enter the marks:");
scanf("%f",&s[i].marks);
printf("\n");
}
printf("\ndetails of all the student:\n");
for(i=0;i<c;++i)
{
printf("the student name:%s\n",s[i].name);
printf("the student roll no. is:%d\n",s[i].roll);
printf("the student mark is:%.2f\n",s[i].marks);
printf("\n");
}
return 0;
}
答案 0 :(得分:1)
使用以下语句,您只分配了只能占用一个student
的内存。
s = (struct student *) malloc (sizeof(struct student));
但您需要的是一系列大小为c
的学生,因此您必须分配c
次现在已分配的内存,因此您可以将其用作s[i]
:< / p>
s = (struct student *) malloc (c * sizeof(struct student));
答案 1 :(得分:0)
char name[50];
声明并分配一个包含50个字符的数组。
如果要动态分配数组,可以使用malloc
:
char *name = malloc(n*sizeof(char));
其中n
是所需的元素数量(在我们的示例中为50)。
答案 2 :(得分:0)
struct student
{
char *name;
int roll;
float marks;
};
#define NAME_LENGTH 128
int i;
struct student *s = malloc(sizeof(struct student) * c);
for(i = 0; i < c; i++)
s[i].name = malloc(NAME_LENGTH);
但是,只要在编译时知道NAME_LENGTH,就没有理由这样做。
在不再需要时,不要忘记free
每个已分配的内存块。