节点创建C
因此,我在尝试使用此结构创建节点时遇到了奇怪的问题:节点创建C,c,string,struct,C,String,Struct,因此,我在尝试使用此结构创建节点时遇到了奇怪的问题: 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*)mall
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 ;
}
我想弦的部分把我甩了。我得到了一堆无与伦比的指针类型
--编辑--
回答:谢谢大家对我的帮助分配行应为:
np = malloc(sizeof *np);
注:
np
前面没有星号,您不想取消引用指针,而是想分配给它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;
}
分配行应为:
np = malloc(sizeof *np);
注:
np
前面没有星号,您不想取消引用指针,而是想分配给它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;
}
应该是
strcpy(copy, value);
strcpy
函数将char指针作为第二个参数,即源地址
struct node *make_node(char *value) {
np->value = copy;
np->count = 1;
应该是
strcpy(copy, value);
strcpy
函数将char指针作为第二个参数,即源地址
struct node *make_node(char *value) {
np->value = copy;
np->count = 1;
您的函数不修改值
,因此声明它常量
是一个好习惯
struct node *make_node(char const *value) {
不要在赋值时取消引用指针。同样,在C语言中使用malloc也是无用的,并且可以隐藏bug
np = malloc(sizeof(*np));
请注意,强烈建议您检查malloc
的NULL
结果。内存分配可能会失败
您在这里正确计算字符串的大小
strlen(value)+1
,但在此之后sizeof
是不正确的。它将只返回int
的大小
char* copy = malloc(strlen(value)+1);
strcpy
采用(char*,char const*)
而不是(char*,char)
同样,取消引用不是您想要的。仅分配指针值(地址)
您可能是指这里的
NULL
np->next = NULL;
您的函数不修改值
,因此声明它常量
是一个好习惯
struct node *make_node(char const *value) {
不要在赋值时取消引用指针。同样,在C语言中使用malloc也是无用的,并且可以隐藏bug
np = malloc(sizeof(*np));
请注意,强烈建议您检查malloc
的NULL
结果。内存分配可能会失败
您在这里正确计算字符串的大小
strlen(value)+1
,但在此之后sizeof
是不正确的。它将只返回int
的大小
char* copy = malloc(strlen(value)+1);
strcpy
采用(char*,char const*)
而不是(char*,char)
同样,取消引用不是您想要的。仅分配指针值(地址)
你在这里的意思可能是
NULL
np->next = NULL;
仅此中的语言语法冲突就保证引用您。仅此中的语言语法冲突就保证引用您。