如何在struct中使用malloc或new?

时间:2014-03-12 07:41:44

标签: c pointers struct malloc

如何使用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;
}

3 个答案:

答案 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每个已分配的内存块。