关于linux c的数组问题

#include
int main()
{
int fun(int m);
int p;
scanf("%d",&p);
printf("m is %d",p);
fun(p);
}
int fun(int m)
{
int n=0,k;
int a[n];
printf("m is %d:",m);
for(k=1;k<=m;k++)
{
if(k%7==0||k%11==0)
{
n++;
a[n-1]=k;
printf("a[%d]=%d\n",(n-1),k);

    }

}
printf("the n is :%d",n);

    以上是我的测试代码,例如输入50,则输出1-50之间能被7或11整除的数,期待输出的结果为
    7,11,14,21,22,28,33,35,42,44,49

可是我的代码输出结果如下:

./avgs
50
m is 50
a[0]=7
a[1]=11
a[2]=14
a[3]=21
a[4]=22
a[5]=28
a[6]=33
a[7]=35
the n is :8
只输出到35就结束了 而且总的数组长度为8
想请教下出错的原因,还望不吝赐教~~

多谢多谢~

对于这个代码,首先,你要确定你是能编译过的。。。

#include

void fun(int m)
{
int k , n = 0;
int a[100];
printf("m is %d:",m);
for(k=1;k<=m;k++)
{
if(k%7==0||k%11==0)
{
n++;
a[n-1]=k;
printf("a[%d]=%d\n",(n-1),k);

    }
}

}
int main()
{
int p;
scanf("%d",&p);
printf("m is %d",p);
fun(p);
return 0;
}


楼上已经把代码贴上了,完整点就是

#include<stdio.h>
#define MAX 1000
int main()
{
int fun(int m);
int p;
scanf("%d",&p);
printf("m is %d",p);
fun(p);
}
int fun(int m)
{
int n=0,k;
int a[MAX];
printf("m is %d:",m);
for(k=1;k<=m;k++)
{
if(k%7==0||k%11==0)
{
n++;
a[n-1]=k;
printf("a[%d]=%d\n",(n-1),k);
    }

}
printf("the n is :%d",n);
}

你自己的代码里声明数组为a[n],而n=0,所以你这个数组什么元素也没有,如果你之前n不赋值的话,C语言中不允许变量作为数组的大小会编译出错
,数组大小你应该给一个常亮,不知道你的数据范围,MAX给你设置了1000,你可以自己再修改