c - 将字符串分配给结构中的指针 - 链表 C

标签 c linked-list c-strings

我正在尝试用 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 所做的那样。当您完成使用它时,还释放使用mallocstrdup分配的内存。

给你举个例子。 (插图)

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/

相关文章:

c - 为什么我的字符串的大小会改变? (C)

c++ - 如何初始化 C 字符串数组(无 STL)

c++ - 如何在 C++ 中创建链表 vector ?

delphi - 从链接列表中获取项目

java - 创建 ListNode 的新实例

c - 打印一个字符串和各种整型变量 C

巨大 CString 的 C++ 串联

c - “getchar”不适用于 Sublime Text

c - 获取预定义字符串的长度与从输入获取字符串的长度

c - 如何在没有平台依赖性的情况下在 C 中复制文件?