我想在C中的数组中创建数组,而没有预定义数量的字符或数组中的输入。 以下是我的代码:
{
int noOfStudents,noOfItems;
int *grades;
int i;
char a[];
printf("Please enter number of students\n");
scanf("%d", &noOfStudents);
printf("Please enter number of items\n");
scanf("%d", &noOfItems);
for (i = 0; i < noOfStudents; i++)
{
a[i] = (int *)malloc((sizeof(int))*noOfItems);
}
我被抛出错误
c(2133):'a':未知大小
如何通过malloc成功在数组中创建数组?
答案 0 :(得分:2)
您可以使用VLA (Variable length array)。
您需要重新安排代码,例如
int noOfStudents = -1, noOfItems = -1;
int *grades; //is it used?
int i;
printf("Please enter number of students\n");
scanf("%d", &noOfStudents);
//fail check
int *a[noOfStudents]; // this needs to be proper.
//VLA
printf("Please enter number of items\n");
scanf("%d", &noOfItems);
//fail check
for (i = 0; i < noOfStudents; i++)
{
a[i] = malloc(noOfItems * sizeof(a[i])); //do not cast
}
答案 1 :(得分:2)
您需要一个二维数组来保存整数项列表。你可以通过在整数指针上声明一个指针来做到这一点。
所以你要声明
printf("Please enter number of students\n");
if (scanf("%d", &noOfStudents)==0 && noOfStudents<=0) // bonus: small safety
{
printf("input error\n");
exit(1);
}
// now we are sure that noOfStudents is strictly positive & properly entered
a = malloc(sizeof(int*)*noOfStudents);
然后
malloc
然后你分配了你的指针数组,其余代码都没问题(不要转换a = malloc(sizeof(*a)*noOfStudents);
BTW的返回值
变体是:
a
(因此,如果{{1}}的类型发生变化,则大小如下,而不是因为它们是所有指针而在此处重要)
答案 2 :(得分:0)
使用指针代替数组,并使用malloc
或calloc
函数动态分配该指针的内存。
像这样:
int *a;
a = malloc((sizeof(int)*noOfItems);
答案 3 :(得分:-2)
您可以尝试函数malloc
,它会动态分配内存并返回指向它的指针。然后,您可以将指针强制转换为指向某种类型数组的指针。