我正在尝试为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()应该释放程序中的指针,或者我只是可以释放节点?谢谢!
2 回答
这样就可以了 . 如果你没有这个(
strdup
是POSIX的东西)分配内存然后使用strcpy
/memcpy
来复制name
指向的字符串 .不要在
typedef
里面隐藏指针's easier to maintain in large codebase - you always have to look back to get what it'的类型是写正确的代码 .不要强制转换
malloc
的返回值并检查strdup
的返回值,就像对malloc
所做的那样 . 此外free
使用malloc
和strdup
分配的内存 .给你举个例子 . (插图)
编辑:如果
strdup
不在那里 .您的结构包含
char*
成员 . 它们可以指向一个字符串,但它们不能包含字符串 . 为了复制这些字符串成员,您需要为新结构中的char*
字段分配缓冲区,然后在内容上分配strncpy()
.释放您分配的所有内存是您的责任 . 可以把它想象成每个
malloc
调用都需要匹配free
. 我建议编写一个处理清理的相应delete_stud
函数 . 它可以释放与结构相关的内存,以及为char*
成员分配的任何缓冲区 .