所以,我在这个网站上读到c ++不允许变长数组但gcc允许它。所以,我想测试一个小代码
#include<stdio.h>
#include<stdint.h>
void main()
{
int8_t n;
int8_t var_array[n];
int8_t i;
printf("Enter array size: \r\n");
scanf("%d", &n);
for(i=0; i<n; i++)
var_array[i] = i;
for(i=0; i<n; i++)
printf("var_array[%d] = %d\r\n", i, var_array[i]);
}
代码用&#34; gcc var_array.c -o var_array&#34;编译。在linux操作系统中命令但是当我运行它时,我得到分段错误错误
Enter array size:
5
Segmentation fault
我做错了什么?
答案 0 :(得分:5)
同样使用int
,因为您正在使用%d
说明符。 (因为早期只有8位,如果值很大,可能会溢出)
int n;
int i;
printf("Enter array size: \r\n");
if( scanf("%d", &n) != 1 ){
fprintf(stderr,"%s\n","Error in input");
exit(1);
}
int var_array[n];
for(i=0; i<n; i++)
var_array[i] = i;
...
您使用的是未初始化的变量。然后根据访问阵列的新值eof n
。索引最有可能从数组的边界索引,给出了seg错误。
输入int8_t
时使用scanf("%" SCNd8, &n);
。您也可以输入int8_t
类型。
是必须检查scanf
的返回值。
所以理想的电话会是
if( scanf("%d",&n) == 1 ){
//...success..do work
}
答案 1 :(得分:1)
程序中的错误是
int8_t n; //Here n is declared where n has random value
int8_t var_array[n]; /*Now in this statement you have declared array
with the size of that random value*/
所以你得到了这个错误,为了纠正你必须得到n
的输入值,然后你声明var_array[n]