gpt4 book ai didi

c - 带有字符串指针的结构

转载 作者:行者123 更新时间:2023-11-30 21:07:13 31 4
gpt4 key购买 nike

我在结构中有一个字符指针来存储名称。当我插入值并打印时,所有节点都会打印名称的最后一个值。

typedef struct tests{
int id;
char *p;
struct tests *next;
}test;'

'void add(test **root,int id,char *name){
test *newnode=(test* )malloc(sizeof(test));
newnode->id=id;
newnode->p=name;
newnode->next=NULL;
test *curr;
curr=(*root);
if((*root)==NULL){
(*root)=newnode;
}

else{
while(curr->next!=NULL){
curr=curr->next;
}
curr->next=newnode;
}
}

最佳答案

您最有可能想要实现的目标是:

#include <stddef.h>
#include <stdlib.h>
#include <string.h>

typedef struct test_s {
int id;
char *p;
struct test_s *next;
} test_t;

test_t** add(test_t **root, int id, char const *name){
size_t len = strlen(name);
test_t *newnode=(test_t*)malloc(sizeof(test_t)+len+1); // 1 goes for \0 terminator
newnode->id=id;
strcpy(newnode->p=(void*)(newnode+1), name);
newnode->next=NULL;
test_t **tail = root;
while (*tail) {
tail = &(*tail)->next;
}
*tail = newnode;
return &(newnode->next);
}

您的代码的问题是,您从未复制字符串而只分配一个指针。

再次查看指针机制,另外我建议您检查 string.h 引用。

关于c - 带有字符串指针的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44760325/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com