我目前有代码:
struct node
{
int data;
struct node *next;
}*head,*var,*trav;
void insert_at_end(int value)
{
struct node *temp;
temp=head;
var=(struct node *)malloc(sizeof (struct node));
var->data=value;
if(head==NULL)
{
head=var;
head->next=NULL;
}
else
{
while(temp->next!=NULL)
{
temp=temp->next;
}
var->next=NULL;
temp->next=var;
}
}
void display()
{
trav=head;
if(trav==NULL)
{
printf("\nList is Empty");
}
else
{
printf("\nElements in the List: ");
while(trav!=NULL)
{
printf(" -> %d ",trav->data);
trav=trav->next;
}
printf("\n");
}
}
int main(){
int value;
scanf("%d", &value);
insert_at_end(value);
display();
return 0;
}
插入 int 一切正常。但是,我想插入一个字符串。像“狗”这样的词。我变了
int data to char data[255];
并将“%d”的所有实例更改为“%s”,但这不起作用。有人有什么想法吗?谢谢。
最佳答案
您需要进行以下更改:
“int 数据”转换为“char 数据[255]”
将 insert_at_end 的参数更改为“char *value”
以下几行代替了对 insert_at_end 的赋值:
strncpy(var->data, value, sizeof(var->data));
var->data[sizeof(var->data)-1] = '\0';
将 %d 更改为 %s
将从输入读取值的代码更改为以下内容:
字符值[255];
fgets(值, sizeof(值), 标准输入);
insert_at_end(值);
此代码不会删除 fgets 将读取的换行符。留给读者练习如何去除多余的换行符。它还留给读者练习如何动态分配内存以便支持可变长度字符串(提示:使用 malloc 并记住释放它!)
但是,为了了解为什么需要进行这些更改以及了解数组、字符串和指针在 C 中的工作原理,我建议您阅读一本基础的 C 书籍。完整的解释不适合这个有限的答案。从你的问题中我看出你没有理解C的一些基本原理,可能C不一定是你现在使用的最好的语言。
我还建议阅读一些基本的安全编码指南,以了解为什么在 strncpy 之后完成“\0”赋值,因为 strncpy 本质上是一个不安全的函数。
关于c - 字符串和链表 - C 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29133043/