C++ 调用fscanf后奇怪的局部变量更改
我有一段代码从文件中读取一些参数:C++ 调用fscanf后奇怪的局部变量更改,c++,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
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);
}
int readInput()
{
cfFile=fopen(配置文件,“r”);
inFile=fopen(输入文件,“r”);
fscanf(cfFile、%d、&player);
fscanf(填充,“%d%d%d”、&剩余的[0]、&剩余的[1]、&lastRow、&lastCol);
字符线[boardWidth+1];
对于(inti=0;i直线的定义是什么?它是(非常)很可能读取的字符数超过了变量大小。使用所有变量声明和main创建一个完整的测试用例,确保代码的其他部分没有内存泄漏。添加一个触发问题的文件示例。文件中的行可能比行
缓冲区长,因此fscanf()读取数据
溢出,堆栈的其他部分被覆盖。变量i
存储在该区域的某个地方,因此也被覆盖。fscanf
with%s
与get
一样危险。千万不要使用它。