将文本从文件加载到二维数组中(C++)
问题描述:
我正在制作游戏,并将地图数据存储在大小为[34] [10]的二维数组中。本来我生成使用一个简单的功能,填补了阵列的地图,并使用下面的代码此数据保存到一个文件:将文本从文件加载到二维数组中(C++)
ofstream myFile;
myFile.open("map.txt");
for (int y = 0 ; y < MAP_HEIGHT ; ++y)
{
for (int x = 0 ; x < MAP_WIDTH ; ++x)
{
myFile << m_acMapData[x][y];
}
myFile << '\n';
}
myFile.close();
它输出一个文本文件,它看起来像我希望的方式。然而,当我尝试重新使用下面的代码读它,我得到的访问冲突的负载,它在运行时崩溃:
ifstream myFile;
int i=0;
int j=0;
char line[MAP_WIDTH];
myFile.open("map.txt");
while (!myFile.eof())
{
myFile.getline(line, MAP_WIDTH);
for (i=0; i<MAP_WIDTH; i++)
{
m_acMapData[i][j] = line[i];
}
++j;
cout << line;
}
有谁知道问题是什么?
答
while (!myFile.eof())
{
myFile.getline(line, MAP_WIDTH);
应该是:
while (myFile.getline(line, MAP_WIDTH))
{
这将然而是更安全的读入的std :: string:
string line:
while (getline(myFile, line))
{
您可能还希望阅读我的博客在这个问题上,在http://punchlet.wordpress.com。
答
雅我会肯定崩溃,因为你在这里做错了。
ofstream myFile;
myFile.open("map.txt");
for (int y = 0 ; y < MAP_HEIGHT ; ++y)
{
for (int x = 0 ; x < MAP_WIDTH ; ++x)
{
myFile << m_acMapData[x][y];
}
myFile << '\n';
}
myFile.close();
假设MAP_HEIGHT = 3
和MAP_WIDTH = 6 ;
而且你必须知道在C/C数组++是一排大,所以当你试图进出
m_acMapData [4] [0]会访问内存其范围。
所以做这样的事情:
for (int y = 0 ; y < MAP_HEIGHT ; ++y)
{
for (int x = 0 ; x < MAP_WIDTH ; ++x)
{
myFile << m_acMapData[y][x]; // here to be changed
}
myFile << '\n';
}
什么'm_acMapData',它是如何声明和初始化? – atzz 2009-12-09 10:25:04