所以我有这个链接列表,它可以工作,但前提是你将一个项目添加到列表中。这是我的代码:
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 值,那么我将如何打印列表中的字符串值。我曾尝试将我的代码修改为男性内容字符串,但它永远不会成功。非常感谢任何建议,谢谢