向链表添加元素(C)
add element to a linked list(C)
我想创建一个 link 列表,稍后我可以添加更多元素,但当前代码的问题是所有先前的元素都被最后一个元素覆盖 added.here是我的代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node {
char *name;
struct node *next;
}*head;
void add( char *str ) {
struct node *temp;
temp=(struct node *)malloc(sizeof(struct node));
temp->name=str;
if (head== NULL) {
head=temp;
head->next=NULL;
} else {
temp->next=head;
head=temp;
}
}
void display(struct node *r) {
r=head;
if(r==NULL)
return;
while(r!=NULL) {
printf("%s ",r->name);
r=r->next;
}
printf("\n");
}
int main()
{
char *str;
struct node *n;
head=NULL;
while(scanf("%s",str) == 1) {
add(str);
display(n);
}
return 0;
}
改变
int main()
{
char *str;
至
int main()
{
char str[100]; // Or some other value to give scanf somewhere to put the data
然后在添加(假设这个功能在你的设置中可用)
temp->name=strdup(str);
我将释放内存留作 reader
的练习
在你的add
中你使用构造
temp->name=str;
它不执行字符串复制,只是让temp->name
指向str
。您应该改用 strcpy
。像
temp->name = (char*) malloc(strlen(str)+1);
strcpy(temp->name, str);
并且在您的主函数中,您应该先为变量 str
分配内存,然后再在 scanf
.
中使用它
char* str = (char *)malloc(255);
...
free(str);
或
char str[255];
我想创建一个 link 列表,稍后我可以添加更多元素,但当前代码的问题是所有先前的元素都被最后一个元素覆盖 added.here是我的代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node {
char *name;
struct node *next;
}*head;
void add( char *str ) {
struct node *temp;
temp=(struct node *)malloc(sizeof(struct node));
temp->name=str;
if (head== NULL) {
head=temp;
head->next=NULL;
} else {
temp->next=head;
head=temp;
}
}
void display(struct node *r) {
r=head;
if(r==NULL)
return;
while(r!=NULL) {
printf("%s ",r->name);
r=r->next;
}
printf("\n");
}
int main()
{
char *str;
struct node *n;
head=NULL;
while(scanf("%s",str) == 1) {
add(str);
display(n);
}
return 0;
}
改变
int main()
{
char *str;
至
int main()
{
char str[100]; // Or some other value to give scanf somewhere to put the data
然后在添加(假设这个功能在你的设置中可用)
temp->name=strdup(str);
我将释放内存留作 reader
的练习在你的add
中你使用构造
temp->name=str;
它不执行字符串复制,只是让temp->name
指向str
。您应该改用 strcpy
。像
temp->name = (char*) malloc(strlen(str)+1);
strcpy(temp->name, str);
并且在您的主函数中,您应该先为变量 str
分配内存,然后再在 scanf
.
char* str = (char *)malloc(255);
...
free(str);
或
char str[255];