0

条件に基づいてリンク リストに文字列を追加する ac プログラムを作成しています。私のコードは非常に長いので、私の問題も示す簡略化されたバージョンを作成しました。

私の問題は、リストを文字列で埋めた後、すべての要素を印刷したいときに、「go_thru」関数がリストの最後の要素を印刷できないことです。コード:

#include <stdio.h>
#include <stdlib.h>

typedef struct listelement{
    char val[100];
    struct listelement *next;
} LISTELEMENT;

void go_thru( LISTELEMENT *head ){
    LISTELEMENT *temp = head;

    while( temp != NULL ){
        printf("%s ", temp->val);
        temp = temp->next;
    }
}

LISTELEMENT *insert_before( LISTELEMENT *head, char value[] ){
    LISTELEMENT *new_el = ( LISTELEMENT* ) malloc( sizeof( LISTELEMENT ) );

    strcpy( new_el->val, value );
    new_el->next = head;

    return new_el;
}

int main()
{
    LISTELEMENT *list_chi = NULL;
    int i;
    char arr[6][10] = { "cheese",
                        "salt",
                        "icecream",
                        "snow",
                        "summer",
                        "violet"    };
    for( i = 0; i < 6; i++ )
        list_chi = insert_before( list_chi, arr[i] );

    go_thru( list_chi->next );

    return 0;
}

出力には、「violet」を除くすべての文字列が含まれます。私は答えを探して何度もグーグルで検索し、ここで質問を検索しようとしましたが、それでも問題を解決できませんでした:/

4

1 に答える 1