C - 声明具有未定义值的数组

时间:2013-03-07 06:31:35

标签: c

我试图通过让用户在提示后输入数组的大小来确定数组的大小(因为我不知道每次测试会有多少等级)...

它似乎不喜欢scanf ("%c",&grades[i]);

所在的行

这是整个功能:

#include <stdio.h>

 int main (void)
{
int numGrades;
char grades;
char i;
int x;


printf ("Enter The Amount Of Numbers In Your Array: ");
scanf("%i", &numGrades);/*Stores Amount Of Grades In The Array*/

for (x = 0; x < numGrades; ++x)
  {
  printf ("\nEnter the grade: ");
  scanf ("%c",&grades[i]);
  }

return 0; 
}

如何将数组大小作为参数传递,以便我可以接受任何大小的数组? (我将添加一个功能,它将取得所有成绩并通过字母将它们组合在一起)

2 个答案:

答案 0 :(得分:3)

您有两种选择:

  1. 如果您的编译器支持C99可变长度数组,您可以在获得大小后声明数组:

    scanf("%i", &numGrades);
    char grades[numGrades];
    
  2. 如果没有,则必须在堆上动态分配数组:

    scanf("%i", &numGrades);
    char *grades = malloc(numGrades * (sizeof *grades));
    

答案 1 :(得分:2)

您将grades声明为单个char,而不是数组。在您阅读numGrades之后将声明移至并使其成为VLA,如下所示:

char grades[numGrades];

或者使用动态分配:

char *grades = malloc(numGrades);

如果选择后者,请不要忘记free()