调用fscanf后奇怪的局部变量发生了变化

时间:2014-04-15 05:41:21

标签: c++

我有这段代码从文件中读取一些参数:

int readInput()
{
    cfFile = fopen(CONFIGFILE,"r");
    inFile = fopen(INPUTFILE,"r");
    fscanf(cfFile,"%d",&player);
    fscanf(inFile,"%d%d%d%d",&remaining[0],&remaining[1],&lastRow,&lastCol);
    char line[boardWidth+1];
    for (int i=0;i<boardHeight;++i)
    {
        //int l = i;
        fscanf(inFile,"%s",line);
        for (int j=0;j<boardWidth;++j)
        {
            int val = 0;
            if (line[j] == 'r') val = 0;
            if (line[j] == 'b') val = 1;
            if (line[j] == '_') val = 2;
            if (line[j] == 'x') val = 3;
            M[i][j]=val;
        }
    }
    fclose(cfFile);
    fclose(inFile);
}

当我跑步时,它给了我内存错误。结果表明i之后fscanf(inFile,"%s",line)2403之后int l = i的价值发生了变化。这很奇怪。如果我在上面添加了行int l,它会毫无错误地运行,但将其更改为boardWidth + 2并不起作用。我还尝试将行长度更改为{{1}},代码无限运行。

任何人都可以解释在这种情况下发生了什么?因为尽管添加了行的代码运行了,但我仍然害怕看不见的错误。

1 个答案:

答案 0 :(得分:0)

行的定义是什么? (很可能)你读的字符多于变量大小。