私は構造体を持っています:
struct numbers_struct {
char numbers_array[1000];
};
struct numbers_struct numbers[some_size];
構造体を作成した後、入力として整数があります。
scanf("%d",&size);
malloc(size)
配列番号のサイズを使用して指定する必要があります。(some_size使用サイズの代わりに)
このようなことはCで可能ですか?
はい、ただしmalloc()
、要素の数ではなく、配列に必要なメモリの合計量が必要です。
struct numbers_struct* numbers = malloc(size * sizeof(*numbers));
if (numbers)
{
}
使用する前にの戻り値を確認する必要があることに注意してください(この場合は不適切な名前です) 。scanf()
size
scanf()
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 で導入されましたが、その使用には制限があります (たとえば、ファイル スコープでは使用できません)。
あなたはこのようにできるかもしれません
struct numbers_struct {
char numbers_array[1000];
};
scanf("%d",&size);
struct numbers_struct *numbers = malloc(sizeof(numbers_struct) * size);
ドキュメントの「calloc」と「alloc」および「realloc」の使用法を参照してください。
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);
}
エラーなしでコンパイルされます。