1

誰でもこれで私を助けることができますか?次の構造体があるとします。

typedef struct mystruct{
    int data1;
    int data2;
}mystruct;

そして、以下のコードを使用して構造体の配列を作成しました:

main(void) {
    mystruct **new_mystruct = function();
    ... need to know the length of new_mystruct here ...
}

mystruct **function(){
    ... code to determine length of array here ...
    mystruct **new_mystruct= malloc(length_of_array * sizeof(mystruct));
    ... code to fill array here ...
    return new_mystruct;
}

関数の実行時に length_of_array が動的に生成されると仮定すると、配列の長さを返す最良の方法は何ですか?

私が理にかなっていることを願っています。前もって感謝します。

4

4 に答える 4

2

関数への参照として長さを渡し、関数にそれを入力させることができます。

mystruct *function(size_t *size)
{
    /* ... */

    mystruct *new_mystruct = malloc(length_of_array * sizeof(mystruct))
    *size = length_of_array;

    /* ... */

    return new_mystruct;
}

int main(void)
{
    /* ... */

    size_t size;
    mystruct *new_mystruct = function(&size);

    /* ... */
}
于 2013-05-25T11:29:44.163 に答える
2

ラッパー構造体を作成します。

typedef struct_array_
{
    mystruct * p;
    size_t size;
} struct_array;

作成関数はこれを値で返すことができます:

struct_array create_array(size_t n)
{
    mystruct * p = malloc(n * sizeof *p);
    struct_array result = { p, n };
    return result;
}

一致するクリーンアップ関数を作成する必要があります。

void destroy_array(struct_array a)
{
    free(a.p);
}

copy_arrayを使用してコピーを作成する関数を作成することもできmemcpyます。

于 2013-05-25T11:32:23.553 に答える
0
size_t function(MyStruct *mystruct)
{
    /*...*/
    mystruct = malloc(length_of_array * sizeof(MyStruct)); 
    /*...*/
    return length_of_array;   
}

そして使う

MyArray *new_array;
size_t lenght;

lenght = function(new_array);
于 2013-05-25T11:31:01.727 に答える
0

長さと割り当てられた配列へのポインターの両方を含む構造体 (または構造体へのポインター) を返すか、変数へのポインターを渡して長さを受け取ることができます。

int length;

mystruct **new_mystruct = function(&length);

私はスタクトアプローチを好みます。

于 2013-05-25T11:31:11.100 に答える