主函数里的b如果自行输入就输出不了结果,如果一开始就给它赋值就能出结果,请问是为什么呢

#include<stdio.h>
#include<stdlib.h>
typedef struct tree
{
char a;
struct tree *l;
struct tree *r;
}tree,*btree;
int i;
int e;
int y;
btree make(btree T,char j[],int c[],int b)
{
btree n[b];
for(i=0;i<b;i++)
{
n[i]=(btree)malloc(sizeof(tree));
n[i]->a=j[i];
n[i]->l=n[i]->r=NULL;
}
e=1;
for(i=0;i<b;i++)
{
if(c[i]!=0)
{
n[i]->l=n[e];
for(y=1;y<=c[i]-1;y++)
{
e++;
n[e-1]->r=n[e];
}
e++;
}
}
T=n[0];
return T;
}
void nice(btree T)
{
if(T!=NULL)
{
nice(T->l);
printf("%c ",T->a);
nice(T->r);
}
}
int main()
{
int b;
scanf("%d",&b);
int c[b];
char j[100];
for(i=0;i<b;i++)
{
scanf("%c",&j[i]);getchar();
}
for(i=0;i<b;i++)
{
scanf("%d",&c[i]);
}
btree T;
T=make(T,j,c,b);
nice(T);
return 0;
}

定义可变数组在C++中可以定义vector类型的数据,C语言可以自己手动写一个类似的方法

定义数组的话数组长度必须是一个确定值,不能动态定义。