gpt4 book ai didi

C:链表打印垃圾字符

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

这是我写的一段代码,它在链表中添加了人的名字。当我试图显示这些名字时遇到了问题。我的代码没有打印名字,而是打印了垃圾字符代码...

struct node
{
char name1[5];
struct node *link;
};


void add(struct node **q,char *name)
{
struct node *temp,*r;
if(*q==NULL)
{
temp=malloc(sizeof(struct node));
*temp->name1=name;
temp->link=NULL;
*q=temp;
count++;
}
else
{
count++;
temp=*q;
while(temp->link !=NULL)
temp=temp->link;

r=malloc(sizeof(struct node));
*r->name1=name;
r->link=NULL;
temp->link=r;
}

}



void display(struct node *q)
{
while(q!=NULL)
{
printf("%s",q->name1); //it prints junk characters
q=q->link;
}

}
int main()
{
struct node *p;
p=NULL;

add(&p,"Alice");
add(&p,"Cat");
add(&p,"Pawan");
add(&p,"BoB");

display(p);
getch();
return 0;
}

最佳答案

这个:

*temp->name1=name;

根本没有达到您的期望。它将 name 字符串的地址转换为一个字符,并将 temp1->name1 的第一个字符设置为该值。

这种错误的转换应该会产生编译器警告:确保启用编译器能够发出的所有警告,并修复它们。

要更正代码,您需要实际复制字符串数据:

strcpy(temp->name1, name);

请注意,如果 namename1 支持的长,即超过 4 个字符加上终止 0 字符,这是非常危险的。您可以使用以下方式使其更安全:

strlcpy(temp->name1, name, sizeof temp->name1);

如果你有,或者

snprintf(temp->name1, sizeof temp->name1, "%s", name);

如果你有的话。

关于C:链表打印垃圾字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14981057/

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