繁体   English   中英

如何为结构数组中的char字符串分配内存?

[英]How to allocate memory for char strings in a struct array?

我将要创建一个程序,将学生的数据存储在列表中。 我的问题是,如何为结构数组中的每个char字符串分配内存。 我的代码在下面。 如果还有其他错误,请纠正我。

#include <stdio.h>
#include <stdlib.h>
#define DATA 10;
#define NAME 10;

typedef struct{
int id;
char *givenname;
char *familyname;

} students;

int main()
{
int answer;
int incr = 0; // Index for students in the list
int datalen = DATA;
int namelen = NAME;

students *studentlist;
studentlist = malloc(datalen * sizeof(students)); // Allocate memory for first ten students

if(NULL == studentlist){
    printf("Error: Couldn't allocate memory\n");
    exit(0);
}

for(incr = 0; incr < datalen; incr ++){
    printf("Add student to the list? Yes(1) No(2)\n");
    scanf("%d", &answer);

    if(answer != 1){
        break;
    }

    studentlist[incr]->givenname = malloc(namelen * sizeof(char)); // Allocate memory for each name
    studentlist[incr]->familyname = malloc(namelen * sizeof(char));

    printf("Insert ID: ");
    scanf("%d", &studentlist[incr].id);

    printf("Insert given name: \n");
    scanf("%s", studentlist[incr].givenname);

    printf("Insert family name: \n");
    scanf("%s", studentlist[incr].familyname);


}

free(studentlist);
free(studentlist.givename);
free(studentlist.familyname);


return 0;
}

某些元素的引用是错误的:

studentlist[incr]->givenname

它应该是:

studentlist[incr].givenname

字符串的分配似乎很好。

您的释放代码需要更改:

free(studentlist);
free(studentlist.givename);
free(studentlist.familyname);

您需要循环释放studentlist.givename和studentlist.familyname,然后在末尾释放studentlist:

for(incr = 0; incr < datalen; incr ++){
   free(studentlist[incr].givename);
   free(studentlist[incr].familyname);
}
free(studentlist);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM