3

私は構造体を持っています:

struct numbers_struct {
char numbers_array[1000];
};

struct numbers_struct numbers[some_size];

構造体を作成した後、入力として整数があります。

scanf("%d",&size);

malloc(size)配列番号のサイズを使用して指定する必要があります。(some_size使用サイズの代わりに)

このようなことはCで可能ですか?

4

5 に答える 5

5

はい、ただしmalloc()、要素の数ではなく、配列に必要なメモリの合計量が必要です。

struct numbers_struct* numbers = malloc(size * sizeof(*numbers));
if (numbers)
{
}

使用する前にの戻り値を確認する必要があることに注意してください(この場合は不適切な名前です) 。scanf()sizescanf()

int number_of_elements;
if (1 == scanf("%d", &number_of_elements))
{
    struct numbers_struct* numbers =
        malloc(number_of_elements * sizeof(*numbers));
    if (numbers)
    {
        free(numbers); /* Remember to release allocated memory
                          when no longer required. */
    }
}

可変長配列は C99 で導入されましたが、その使用には制限があります (たとえば、ファイル スコープでは使用できません)。

于 2012-10-12T07:38:48.823 に答える
4

あなたはこのようにできるかもしれません

 struct numbers_struct {
char numbers_array[1000];
};

scanf("%d",&size);

struct numbers_struct *numbers = malloc(sizeof(numbers_struct) * size);
于 2012-10-12T07:37:56.390 に答える
1

ドキュメントの「calloc」と「alloc」および「realloc」の使用法を参照してください。

于 2012-10-12T07:36:05.477 に答える
1

C99ではVLAが可能です。

あなたはそれを行うことができます

int main()
{
char *p;//I have used char you can use any pointer
int k;
scanf("%d",&k);
p=malloc(k);//just allocated the memory and given the  memory address to p

//after use 
free(p);
}

エラーなしでコンパイルされます。

于 2012-10-12T09:31:05.490 に答える