0

以下のコードは私の問題の例です。リンク リストで検索、挿入などを行うことはできますが、リンク リストは 1 つしかありません。そこで、すべてのアクセサー関数を変更して、var_alias_t 型の新しいリンク リストを簡単に割り当てられるように、作業対象のメンバーを含む構造体を渡せるようにしたいと考えました。

このコードはうまく機能しますが、この関数や他の関数が var_alias_t タイプの複数のリストを変更できるように変更したいと考えています。

    struct var_alias_t
    {
        char *alias;
        char *command;
        struct var_alias_t *next;
    };

    struct var_alias_t *ptr = NULL;
    struct var_alias_t *head = NULL;
    struct var_alias_t *curr = NULL;


    struct var_alias_t* var_alias_ll_create_list(char *alias, char *cmd)
{
    printf("\n creating list with headnode as [%s,%s]\n",alias,cmd);

    struct var_alias_t *ptr = (struct var_alias_t*)malloc(sizeof(struct var_alias_t));
    ptr->alias = malloc(strlen(alias)+1);
    ptr->command = malloc(strlen(cmd)+1);

    if(NULL == ptr)
    {
        printf("\n Node creation failed \n");
        return NULL;
    }

    strcpy(ptr->alias,alias);
    strcpy(ptr->command,cmd);
    ptr->next = NULL;

    head = curr = ptr;
    return ptr;
}

コードを変更する私の試み。

struct var_alias_t
{
    char *alias;
    char *command;
    struct var_alias_t *next;
};

struct var_alias_t *ptr = NULL;
struct var_alias_t *head = NULL;
struct var_alias_t *curr = NULL;


typedef struct
{
    struct var_alias_t *ptr;
    struct var_alias_t *head;
    struct var_alias_t *current;
}ll_tracking_t;

ll_tracking_t ll_var = {NULL,NULL,NULL};
ll_tracking_t ll_alias = {NULL,NULL,NULL};

struct var_alias_t* Xvar_alias_ll_create_list(char *part1, char *part2,ll_tracking_t master)
{
    printf("\n creating list with headnode as [%s,%s]\n",part1,part2);

    struct var_alias_t *(master.ptr) = (struct var_alias_t*)malloc(sizeof(struct var_alias_t));
    master.ptr->alias = malloc(strlen(part1)+1);
    master.ptr->command = malloc(strlen(part2)+1);

    if(NULL == master.ptr)
    {
        printf("\n Node creation failed \n");
        return NULL;
    }

    strcpy(master.ptr->alias,part1);
    strcpy(master.ptr->command,part2);
    //ptr->alias = alias;
    //ptr->command = cmd;
    master.ptr->next = NULL;

    //strcpy(*Items,Data) ; // Here we copy it

    master.head = master.current = master.ptr;
    return master.ptr;
}

私が得るエラーは、以下の行にあります。トークン"

    struct var_alias_t *(master.ptr) = (struct var_alias_t*)malloc(sizeof(struct var_alias_t));

私の理解では、私は間違っていると思いますが、上記のステートメントは意味します。var_alias_t struct のポインターを使用して、var_alias_t struct のサイズの malloced メモリー位置へのポインターである ptr という名前のマスター構造体メンバーの値を設定します。

私はこのすべてのものに慣れていないので、助けてくれてありがとう!

4

1 に答える 1