所以我在尝试用这个结构创建节点时遇到了奇怪的问题:
struct node {
char *value ;
unsigned int count ;
struct node *next ;
} ;
这就是我所拥有的
struct node *make_node(char *value) {
struct node *np = NULL;
*np = (*np)malloc(sizeof(*np));
char* copy = (char*)malloc(sizeof(strlen(value)+1));
strcpy(copy, *value);
*np -> *value = copy;
*np -> count = 1;
*np -> next = null;
return np ;
}
字符串部分是我想的。我得到了一堆无法比较的指针类型。
- EDIT-- 回答,谢谢大家的帮助
答案 0 :(得分:4)
分配行应为:
np = malloc(sizeof *np);
注意:
np
之前没有星号,您不想取消引用指针,您想要指定它。malloc()
's return value。然后你必须:
np->value = copy;
请注意a->b
(对于struct
指针a
)表示(*a).b
。
最后,拼写为NULL
。
假设您有strdup()
,您的功能可以这样写:
struct node * make_node(const char *value) {
struct node *np = malloc(sizeof *np);
if(np != NULL)
{
np->value = strdup(value);
if(np->value != NULL)
{
np->count = 1;
np->next = NULL;
return np;
}
free(np);
}
return NULL;
}
答案 1 :(得分:3)
struct node *make_node(char *value) {
您的功能不会修改value
,因此宣布const
是一个好习惯。
struct node *make_node(char const *value) {
*np = (*np)malloc(sizeof(*np));
不要在指派时取消引用指针。另外,在C中投射malloc是没用的,可以隐藏错误。
np = malloc(sizeof(*np));
请注意,强烈建议您检查malloc
NULL
的结果。内存分配可能会失败。
char* copy = (char*)malloc(sizeof(strlen(value)+1));
您正在strlen(value)+1
正确计算字符串的大小,但之后sizeof
不正确。它只返回int
的大小。
char* copy = malloc(strlen(value)+1);
strcpy(copy, *value);
strcpy
需要(char *, char const *)
而不是(char *, char)
。
strcpy(copy, value);
*np -> *value = copy;
*np -> count = 1;
同样,解除引用不是你想要的。仅指定指针值(地址)。
np->value = copy;
np->count = 1;
*np -> next = null;
这可能意味着NULL
。
np->next = NULL;
答案 2 :(得分:1)
strcpy(copy, *value);
应该是
strcpy(copy, value);
strcpy
函数将char指针作为第二个参数source source。