我有一个结构:
struct numbers_struct {
char numbers_array[1000];
};
struct numbers_struct numbers[some_size];
创建struct后,有一个整数作为输入:
scanf("%d",&size);
我需要使用malloc(size)
并指定数组的大小。 (而不是some_size使用大小)
这样的事情可能在C?
答案 0 :(得分:5)
是的,但是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中引入的,但是它们的使用存在限制(例如,它们不能在文件范围内使用)。
答案 1 :(得分:4)
可能你可以这样做
struct numbers_struct {
char numbers_array[1000];
};
scanf("%d",&size);
struct numbers_struct *numbers = malloc(sizeof(numbers_struct) * size);
答案 2 :(得分:1)
请参阅文档中的“calloc”和“alloc”以及“realloc”用法。
答案 3 :(得分:1)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
struct numbers_struct {
char numbers_array[1000];
};
int size = 10;
int i;
struct numbers_struct *s= malloc(size * sizeof(struct numbers_struct));
for (i=0;i<size;i++){
snprintf(s[i].numbers_array, 20, "test index %d", i);
}
for (i=0;i<size;i++){
printf("%s\n", s[i].numbers_array);
}
free(s);
}
答案 4 :(得分: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);
}
它将编译没有任何错误。