1

だから私はこのリンクされたリストを持っていますが、リストに1つのアイテムを追加した場合にのみ機能します. これが私のコードです:

    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;              

            }
    }

したがって、リストに 3 つの項目を追加して印刷しようとすると、次の 3 つのような最初の項目のみが表示されます。

     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 値のみが出力されるため、リスト内の文字列値をどのように出力するのでしょうか。コードを文字列の男性コンテンツに変更しようとしましたが、うまくいきません。アドバイスをいただければ幸いです。

4

3 に答える 3

2

add 関数には、次のものがあります。

tail->next = new;        
tail->next=NULL;

いつあるべきか

tail->next = new;
tail = new;
tail->next=NULL;

もう 1 つの問題は printnode にあります。内容を出力するときは、文字列に %s を使用する必要があります。%d は整数用です。

于 2013-02-27T04:46:29.093 に答える
0

文字列を出力するには、関数を修正する必要がありますprintnode

printf("Contents   ->%s\n", ptr->content );
                      ^

int具体的に( %d)値を印刷するように要求するため、int値を印刷します。

ジャスティンは、追加機能に関する他の問題を修正しました。

于 2013-02-27T04:47:31.003 に答える
0
  1. キャスト等はしないでくださいmalloc()NULL

  2. プログラムの問題:

    tail->next = new; //I am new list
    tail->next=NULL; //I am nobody!

あなたはおそらく次のことを意味していました:

tail->next = new;
tail->next->next = NULL;
tail = tail->next;
于 2013-02-27T04:49:24.650 に答える