[英]Assign string to pointer in struct - Linked list C
我正在尝试为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
复制name
指向的字符串。
不要将指针隐藏在typedef
这样在大型代码库中更容易维护-您必须回顾一下它的类型,即编写正确的代码。
不要像对malloc
那样strdup
malloc
的返回值并检查strdup
的返回值。 完成使用malloc
和strdup
分配的内存后,还要free
它们。
给你看一个例子。 (插图)
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);
您的结构包含char*
成员。 它们可以指向字符串,但不能包含字符串。 为了复制这些字符串成员,您需要为新结构中的char*
字段分配缓冲区,然后在内容上使用strncpy()
。
释放分配的所有内存是您的责任。 认为每个malloc
调用都需要一个匹配的free
。 我建议编写一个相应的delete_stud
函数来处理清理。 它可以释放与该结构关联的内存,以及为char*
成员分配的所有缓冲区。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.