所以我有这个链表并且它有效但只有你在列表中添加一个项目。这是我的代码:
struct node{
char key[10];
char content[20];
struct node *next;
};
struct node *head=(struct node *) NULL;
struct node *tail=(struct node *) NULL;
struct node * initinode(char *key, char *content)
{
struct node *ptr;
ptr = (struct node *) malloc(sizeof(struct node ) );
if( ptr == NULL )
return (struct node *) NULL;
else {
strcpy( ptr->key, key );
strcpy(ptr->content,content);
return ptr;
}
}
void printnode( struct node *ptr )
{
printf("Key ->%s\n", ptr->key );
printf("Contents ->%d\n", ptr->content );
}
void printlist( struct node *ptr )
{
while( ptr != NULL )
{
printnode( ptr );
ptr = ptr->next;
}
}
void add( struct node *new )
{
if( head == NULL ) {
head = new;
tail=new;
}
else {
tail->next = new;
tail->next=NULL;
}
}
因此,当我尝试将三个项目添加到列表并打印时,它将仅显示第一个项目,如下所示:
struct node *ptr;
char *terminal="term";
char *term;
term=getenv("TERM");
ptr=initinode(terminal, term);
add(ptr);
//-----------------------
char ccterm[20];
char *ret, tty[40];
char *currTerminal="tty";
if ((ret = ttyname(STDIN_FILENO)) == NULL)
perror("ttyname() error");
else {
strcpy(tty, ret);
}
ptr=initinode(currTerminal, tty);
add(ptr);
//----------------------------------
char cwd[1024];
char *st="date";
time_t t;
char ti[30];
time(&t);
char date;
date=t;
sprintf(ti,"%s", ctime(&t));
ptr=initinode(st, ti);
add(ptr);
printlist(ptr);
这将我带到最后一个问题,当我将任何这些添加到列表中时它只输出int值,那么我将如何在列表中打印出字符串值。我已经尝试将我的代码修改为男性内容一个字符串,但它永远不会成功。非常感谢任何建议,谢谢
答案 0 :(得分:2)
在你的添加功能中,你有这个:
tail->next = new;
tail->next=NULL;
什么时候应该
tail->next = new;
tail = new;
tail->next=NULL;
另一个问题是printnode。在打印出内容时,您应该使用%s作为字符串。 %d用于整数。
答案 1 :(得分:0)
要打印字符串,您需要修复printnode
功能。
printf("Contents ->%s\n", ptr->content );
^
它会打印int
值,因为您会专门(%d
)要求打印int
值。
贾斯汀用你的添加功能解决了另一个问题。
答案 2 :(得分:0)
不要投放malloc()
和NULL
等。
程序中的问题:
tail->next = new; //I am new list
tail->next=NULL; //I am nobody!
你可能意味着:
tail->next = new;
tail->next->next = NULL;
tail = tail->next;