我有一个结构:
struct numbers_struct {
char numbers_array[1000];
};
struct numbers_struct numbers[some_size];
Run Code Online (Sandbox Code Playgroud)
创建struct后,有一个整数作为输入:
scanf("%d",&size);
Run Code Online (Sandbox Code Playgroud)
我需要使用malloc(size)并指定数组的大小.(而不是some_size使用大小)
在C中这样的事情可能吗?
是的,但malloc()需要数组的内存总量,而不是元素的数量:
struct numbers_struct* numbers = malloc(size * sizeof(*numbers));
if (numbers)
{
}
Run Code Online (Sandbox Code Playgroud)
请注意,您必须检查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. */
}
}
Run Code Online (Sandbox Code Playgroud)
在C99中引入了可变长度数组,但是它们的使用存在限制(例如,它们不能在文件范围内使用).