我正在尝试用 C 为学生链表编写一个程序。 这是结构:
typedef struct student *studp;
typedef struct student{
int number;
char *name;
char *date;
unsigned grade;
studp next;
}stud;
现在我想编写一个函数来创建新节点并为成员赋值。 我不确定该怎么做,这里是函数:
studp create_stud(int number, char *name, char *date, unsigned grade){
studp item = (studp)malloc(sizeof(stud));
if(!item){
printf("Cannot allocate memory\n");
exit(1);
}
item->number = number;
item->name = .....
return item;
} 我应该如何将文本分配给成员姓名和日期?我可以使用运算符“=”吗:
item->name = name;
或者我应该用 malloc() 分配内存? 如果我使用 malloc() 我应该释放程序中的指针还是我可以释放节点? 谢谢!
最佳答案
item->name = strdup(name);
这样就可以了。如果你没有这个(strdup
是 POSIX 的东西)分配内存,然后使用 strcpy
/memcpy
复制指向的字符串姓名
。
不要将指针隐藏在 typedef
中,这样在大型代码库中更容易维护 - 您总是必须回头看看它的类型是什么才能编写正确的代码。
不要强制转换 malloc
的返回值并检查 strdup
的返回值,就像您对 malloc
所做的那样。当您完成使用它时,还释放
使用malloc
和strdup
分配的内存。
给你举个例子。 (插图)
stud* item = malloc(sizeof *item);
if(NULL == item){
perror("Cannot allocate memory\n");
exit(EXIT_FAILURE);
}
...
free(item->name);
free(item->date);
/* whatever you have allocated */
free(item);
编辑:如果 strdup
不存在。
item->name = malloc(strlen(name)+1);
if(!item->name){
perror("malloc");
exit(EXIT_FAILURE);
}
memcpy(item->name, name, strlen(name)+1);
关于c - 将字符串分配给结构中的指针 - 链表 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48891665/