C语言 如何在代码中动态分配向量和结构体?

xtfmy6hx  于 2022-12-11  发布在  其他
关注(0)|答案(1)|浏览(127)

我试图在下面的代码中分配一个struct和一个数组,但是我不知道如何进行。我试图在不添加其他库的情况下完成这个操作。它是葡萄牙语的,所以如果你不理解它的意思,我很抱歉。

struct RegistroAluno{
    int Matricula;
    char Nome[20];
    int AnoNascimento;
};

int main()
{
    int QuantidadeAlunos;
    
    printf("Quantos alunos serão armazenados?\n");
    scanf("%i", &QuantidadeAlunos);
    
    struct RegistroAluno P1[QuantidadeAlunos];
    struct *P1=(int *)malloc(QuantidadeAlunos*sizeof(struct));

    for(int i=0; i<QuantidadeAlunos; i++){
        printf("Qual a matrícula do aluno?\n");
        scanf("%i", &P1[i].Matricula);
    }/* I gotta do the same to all the other elements of the struct*/
    
    
    return 0;
}

我正在分配一个结构体和一个数组

bkhjykvo

bkhjykvo1#

您可以在这里配置struct RegistroAluno的可变长度数组(VLA):

struct RegistroAluno P1[QuantidadeAlunos];

或者,您可以动态配置数组,如下所示:

struct RegistroAluno *P1 = malloc(QuantidadeAlunos*sizeof(*P1));

这里的完整程序包括和错误处理:

#include <stdlib.h>
#include <stdio.h>

struct RegistroAluno{
    int Matricula;
    char Nome[20];
    int AnoNascimento;
};

int main(void) {
    printf("Quantos alunos serão armazenados?\n");
    int QuantidadeAlunos;
    if(scanf("%i", &QuantidadeAlunos) != 1) {
        printf("scanf failed\n");
        return 1;
    }
    if(QuantidadeAlunos < 1) {
        printf("QuantidadeAlunos must be > 0\n");
        return 1;
    }
    struct RegistroAluno *P1 = malloc(QuantidadeAlunos*sizeof(*P1));
    if(!P1) {
        printf("malloc failed\n");
        return 1;
    }
    for(int i=0; i<QuantidadeAlunos; i++){
        printf("Qual a matrícula do aluno?\n");
        if(scanf("%i", &P1[i].Matricula) != 1) {
            printf("scanf failed\n");
            return 1;
        }
    }
}

和示例会话:

Quantos alunos serão armazenados?
2
Qual a matrícula do aluno?
3
Qual a matrícula do aluno?
4

相关问题