如何在没有预定义大小的 C 数组中创建数组



我想在 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类型发生变化,大小也会随之而来,这并不重要,因为它们都是指针(

使用指针而不是数组,并使用malloccalloc函数动态分配该指针的内存。

喜欢这个:

int *a;
a = malloc((sizeof(int)*noOfItems);

您可以尝试函数 malloc ,它动态分配内存并返回指向它的指针。然后,可以将指针强制转换为指向特定类型数组的指针。

相关内容

  • 没有找到相关文章

最新更新