gpt4 book ai didi

c - 具有字符串和输入的结构

转载 作者:太空宇宙 更新时间:2023-11-04 02:14:16 25 4
gpt4 key购买 nike

我有以下结构和向结构中添加内容的函数:

struct scoreentry_node {
struct scoreentry_node *next;
int score;
char* name;
}
;

typedef struct scoreentry_node *score_entry;

score_entry add(int in, char* n, score_entry en) {
score_entry r = malloc(sizeof(struct scoreentry_node));
r->score = in;
r->name = n;
r->next = en;
return r;
}

我在以下主文件中输入了它:

int score;
char name[];

int main(void) {
score_entry readin = NULL;

while(1)
{

scanf("%s%d", name, &score);
readin = add(score, name, readin);
// blah blah

我不知道为什么,但是当输入一个名字时,它会被添加到 readin 中,但是当我输入另一个名字时,readin 中的所有名字都有这个新名字

例如:

input:
bob 10
readin = 10 bob NULL

jill 20
readin = 20 jill 10 jill NULL

我不知道为什么 bob 消失了……有什么原因吗?

最佳答案

您只是存储了一个指向名称字符串的指针,而不是字符串本身的副本。尝试使用 strdup:

r->name = strdup(n);

释放节点时一定要free(r->name)

另一种方法是将 char* name 更改为 char name[1],然后执行如下操作:

score_entry add(int in, char* n, score_entry en) {      
score_entry r = malloc(sizeof(struct scoreentry_node) + strlen(n));
r->score = in;
strcpy(r->name, n);

[..]

这节省了为字符串分配单独的内存块,但请注意,在这种情况下,name 必须位于结构的末尾。

关于c - 具有字符串和输入的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9916976/

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