1

リンクされたリストの値を変更したい。リストは次のように定義されます

struct car_elements {
    char *car_rego;
    double time_parked;
    struct car_elements *next;
};

typedef struct car_elements car;

10 個の要素を持つリンク リストを作成しました。time_parked は簡単に変更できますが、char *car_rego の更新に問題があります。文字列を作成するには

char *rego_array = malloc(7*sizeof(char));
CreateCarRego(rego_array);

CreateCarRego の定義は次のとおりです。

void *CreateCarRego(char *rego_array)
{
    int temp = 0;
    for (int w = 0; w < 6; w++)
    {
        if (w < 3)
        {
            temp = GenerateRandomNumber(26.0);
            temp = temp + ASC_TO_LETTER;
            rego_array[w] = (char)temp;
        }
        else
        {
            temp = GenerateRandomNumber(10.0);
            temp = temp + ASC_TO_NUMBER;
            rego_array[w] = (char)temp;
        }
        rego_array[7] = '\0';
    }
}

次に、値を変更します

car *current_carpark = head; //head holds the linked list

for (int i = 1; i < carspace_number; i++) {  //I know which element I want to change
    current_carpark = current_carpark->next;
}

current_carpark->car_rego = (char*)calloc(strlen(rego_array), sizeof(char));
strncpy(current_carpark->car_rego, rego_array, strlen(rego_array));

これは機能しますが、メモリ リークが発生しました。current_carpark を解放できません。構造体の定義により、文字列 (3 つのランダムな文字と 3 つの乱数) を作成し、car_rego を更新する最良の方法がわかりました。私はちょうど使用することはできません

current_carpark->car_rego = rego_array; 

何も保存されていません。私はCが初めてで、はい、これは割り当てですが、これを機能させようとしましたが、成功しませんでした

4

1 に答える 1