在c中声明大小数组

时间:2016-12-22 09:27:52

标签: c arrays

我知道下一个代码不应该运行。

第一个问题是宣布' int i'在循环内部,而不是在开始代码。

下一个问题是数组大小是在运行时定义的,因此我们必须使用动态分配。

我应该得到"段fualt"。

我用命令运行它:

gcc -Wall commandLineArgument.c -o ex1

int main(void){
  int size=0;
  printf("enter number:\n");
  scanf("%d",&size);
  printf("The size is: %d\n",size);
  int arr[size];
  for(int i= 0;i<size;i++)
  {
    arr[i] = 5;
  }

  for(int i= 0;i<size;i++)
  {
    printf("%d,",arr[i]);
  }  
  printf("\n");
  return 0;}

修改 如果自C99起C中支持可变长度数组 然后如何运行更新代码?

gcc -Wall -std=c89 commandLineArgument.c -o ex1 

int main(void){
int i;
int size=0;
printf("enter number:\n");
scanf("%d",&size);
printf("The size is: %d\n",size);
int arr[size];
printf("The size of arr: %lu\n",sizeof(arr));
for(i= 0;i<size;i++)
{
    arr[i] = 5;
}

for(i= 0;i<size;i++)
{
    printf("%d,",arr[i]);
}    
printf("\n");
return 0;}

2 个答案:

答案 0 :(得分:1)

这是不合时宜的:您的代码自C以来一直是有效的C.

由于至少C99,您可以在i循环中本地声明for

自C99以来,C中支持可变长度数组。 (请注意,即使在C ++ 17中也不支持此功能。)

答案 1 :(得分:1)

看起来您使用的是旧版本的gcc。

您尝试使用的两个功能已添加到C99中。 早于版本5的gcc版本的默认值是使用旧的C89标准进行编译。要使用在以后标准中添加的功能,您需要明确告知旧版gcc使用更新的标准。

编译器选项-std=c11指示gcc使用当前的C11标准。您需要的最小值是-std=99

我建议您告诉gcc使用当前标准:

 gcc -Wall -std=c11 commandLineArgument.c -o ex1

解决问题的另一种方法是升级到gcc v5或更新版本。