c - 动态数组重新分配



我正在尝试创建一个动态列表,但由于某种原因,列表不会增长超过 2 个元素

    typedef struct{
    char* name;
    int age;
} student;
int Insert(void){
    int const MAX = 1000;
    int age;
    char name[MAX];
    int i=1;
    int const ENOGH = 2;
    int const AGE_ERR = 1;
    int flag=0;
    student** array = NULL;
    do{
        printf("insert student namen");
        printf("user: ");
        scanf("%s",name);
        if( strcmp(name,"enough") != 0){
            printf("insert agen");
            printf("user: ");
            scanf("%d",&age);
        }else{
            return ENOGH;
        }
        if ( age == -1){
            flag = AGE_ERR;
        }
        if (age != AGE_ERR){
            array = realloc(array, sizeof(student*)*(i+1));
            array[i] = malloc(sizeof(student));
            if (array[i] == NULL){
                printf("Erorrn");
            }
            array[i]->name =(char*)malloc(sizeof(char)*(strlen(name)+1));
            strcpy(array[i]->name ,name);
            array[i]->age = age;
            i++;
        }
    }while (flag != AGE_ERR);
    return AGE_ERR;
}

我确定这与重新分配指向列表的指针和列表元素分配有关,但我找不到什么

(而循环永不结束以保存一些代码(

这是

不正确的:

 array[i]->name =(char*)malloc(sizeof(strlen(name)));

strlen函数返回一个int,所以sizeof(strlen(name))计算大小为int。 对于您存储的任何字符串来说,这很可能不够长。

相反,您希望:

 array[i]->name = malloc(strlen(name) + 1));

这将为字符串终止空字节分配空间。 您实际上可以将此行及其后面的strcpy替换为调用 strdup

 array[i]->name = strdup(name);

相关内容

  • 没有找到相关文章

最新更新