struct data{
char *key;
char *fname;
char *lname;
char *grade;
struct data *next;
};
newnode = (struct data*)malloc(sizeof(struct data));
strcpy(newnode->lname,lname);
strcpy(newnode->grade,grade);
strcpy(newnode->key,key);
strcpy(newnode->fname,fname);
newnode->next=NULL;
所以我在研究哈希表。上面的代码在
struct data *newnode;
newnode = (struct data*)malloc(sizeof(struct data));
newnode->lname=(char*)malloc(strlen(lname)+1);
newnode->fname=(char*)malloc(strlen(fname)+1);
newnode->grade=(char*)malloc(strlen(grade)+1);
newnode->key=(char*)malloc(strlen(key)+1);
strcpy(newnode->lname,lname);
strcpy(newnode->grade,grade);
strcpy(newnode->key,key);
strcpy(newnode->fname,fname);
newnode->next=NULL;
此代码似乎可以运行。这是为什么?据我所知,我已经在堆中为我的结构分配了内存。为什么我必须专门为每个对象做这件事?我还缺少其他东西吗?因为我真的不明白为什么下面的例子会起作用。
最佳答案
与 newnode = (struct data*)malloc(sizeof(struct data))
, 你只为 struct data
分配内存,这是一组指针,但您不会为这些指针指向的位置以及您将字符串复制到的位置分配任何内存。所以你必须为每个字符串单独分配内存,或者使用 malloc
正如你问题的第二部分,或者使用 strdup
, 这确实 malloc
和 strcpy
在一个命令中:
struct data{
char *key;
char *fname;
char *lname;
char *grade;
struct data *next;
};
newnode = (struct data*)malloc(sizeof(struct data));
newnode->lname = strdup(lname);
newnode-> grade = strdup(grade);
newnode-> key = strdup(key);
newnode-> fname = strdup(fname);
newnode->next=NULL;
值得注意的是 strdup
需要一个字符串作为输入,即一个不是 NULL
的指针并且指向 \0
-终止的字符序列。
关于c - 为c中的结构分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44277048/