繁体   English   中英

将字符串分配给struct中的指针-链接列表C

[英]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的返回值。 完成使用mallocstrdup分配的内存后,还要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.

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