我想在 C 的数组中创建数组,而无需在数组中预定义数量的字符或输入。以下是我的代码:
{
int noOfStudents,noOfItems;
int *grades;
int i;
char a[];
printf("Please enter number of studentsn");
scanf("%d", &noOfStudents);
printf("Please enter number of itemsn");
scanf("%d", &noOfItems);
for (i = 0; i < noOfStudents; i++)
{
a[i] = (int *)malloc((sizeof(int))*noOfItems);
}
我被抛出了一个错误
C(2133(: "A": 大小未知
如何通过 malloc 在数组中成功创建数组?
您可以使用VLA(可变长度数组(。
您需要像
int noOfStudents = -1, noOfItems = -1;
int *grades; //is it used?
int i;
printf("Please enter number of studentsn");
scanf("%d", &noOfStudents);
//fail check
int *a[noOfStudents]; // this needs to be proper.
//VLA
printf("Please enter number of itemsn");
scanf("%d", &noOfItems);
//fail check
for (i = 0; i < noOfStudents; i++)
{
a[i] = malloc(noOfItems * sizeof(a[i])); //do not cast
}
你想要一个二维数组来保存整数项列表的列表。您可以通过在整数指针上声明指针来执行此操作。
所以你想声明
int **a;
然后
printf("Please enter number of studentsn");
if (scanf("%d", &noOfStudents)==0 && noOfStudents<=0) // bonus: small safety
{
printf("input errorn");
exit(1);
}
// now we are sure that noOfStudents is strictly positive & properly entered
a = malloc(sizeof(int*)*noOfStudents);
然后你分配了指针数组,其余代码就可以了(不要强制转换 malloc
BTW 的返回值(
变体是:
a = malloc(sizeof(*a)*noOfStudents);
(因此,如果a
类型发生变化,大小也会随之而来,这并不重要,因为它们都是指针(
使用指针而不是数组,并使用malloc
或calloc
函数动态分配该指针的内存。
喜欢这个:
int *a;
a = malloc((sizeof(int)*noOfItems);
您可以尝试函数 malloc
,它动态分配内存并返回指向它的指针。然后,可以将指针强制转换为指向特定类型数组的指针。