为什么我得到"不能分配一个常量0的数组"?

Giu*_*ppe 5 c++ visual-c++

我正在为学校做一个扫雷程序,但我一直在我的代码上得到这个错误

无法分配常量大小为0的数组

我不知道为什么会这样; 我不分配大小-我设置上0的另一个问题是,我怎么能读我输入charchar,所以我可以将它保存在我的阵列?

如下所示,我正在使用输入和输出.我记录了我的输入和输出,所以你们可以看到我正在使用的程序.我想读取char,char所以我可以保存数组上的所有地图.

我正在使用MSVC++ 2010.

freopen("input.txt","rt",stdin);
//4 4
//*...
//....
//.*..
//....
//3 5
//**...
//.....
//.*...
//0 0


freopen("output.txt","wt",stdout);

/*Field #1:
*100
2210
1*10
1110

Field #2:
**100
33200
1*100*/
int n=-1;
int m=-1;
int cont =0;
while(n!=0 && m!=0)
{
    scanf("%d %d",&n,&m);
    int VMatriz[n][m]={0};
    int Mapa[n][m]={0};


    if (n==0 && m==0)
        break;
    cont++;
    printf("Field #%d",cont);


    for (int i=0;i<n;i++)
    {   printf("/n");
        for (int j=0;j<m;j++)
        {

            scanf("%d ",&Mapa[i][j]);

            if (Mapa[i][j]=='*')
                {
                    if (j-1>=0)
                        VMatriz[i][j-1]++;
                    if (j+1<m)
                        VMatriz[i][j+1]++;
                    if (i-1>=0)
                        VMatriz[i-1][j]++;
                    if (i+1<m)
                        VMatriz[i+1][j]++;

                    if (j-1>=0 && i-1>0)
                        VMatriz[i-1][j-1]++;
                    if (j-1>=0 && i+1<m)
                        VMatriz[i+1][j-1]++;
                    if (j+1<m && i-1>0)
                        VMatriz[i-1][j+1]++;
                    if (j+1<m && i+1<m)
                        VMatriz[i+1][j+1]++;

                    VMatriz[i][j]='*';

                printf("%d",VMatriz[i][j]);


                }

        }   

    }
    printf("/n");


}
return 0;
Run Code Online (Sandbox Code Playgroud)

}

Ed *_* S. 8

int VMatriz[n][m]={0};
Run Code Online (Sandbox Code Playgroud)

这是非法的.就像这个更简单的版本;

int n = 10;
int x[n]; // C2057
Run Code Online (Sandbox Code Playgroud)

然而...

int x[10]; // ok!
Run Code Online (Sandbox Code Playgroud)

你在这里真正关心的错误是这一个,而不是"不能分配一个常量大小0的数组"错误.

错误C2057:预期的常量表达式

您无法在C++中分配具有自动存储持续时间的未知大小的数组.如果你想要一个可变大小的数组,那么你需要动态分配它(或者,更好的是;只需使用a vector).

请注意,有一个gcc扩展允许这个,但不是在VS中(它不是标准的C++.它是为C++ 11提交的,但最终被拒绝了.)