2009-12-09 4 views
2

나는 게임을 만들고지도 데이터를 크기 [34] [10]의 2 차원 배열로 저장했습니다. 원래 나는 배열을 채우기 위해 간단한 함수를 사용하여 맵을 생성하고 다음 코드를 사용하여 파일에 데이터를 저장 :파일에서 텍스트를 2 차원 배열로로드하기 (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; 
} 

사람이 알고 있나요

?

+0

이 m_acMapData', 어떻게이이 선언되고 초기화'무엇 :

그래서 이런 일을합니까? – atzz

답변

3
while (!myFile.eof()) 
{ 
     myFile.getline(line, MAP_WIDTH); 

은 다음과 같아야합니다

while (myFile.getline(line, MAP_WIDTH)) 
{ 

그러나 표준 : : 문자열로 읽어 안전 할 것입니다 : 당신은이 주제에 내 블로그를 읽어보십시오

string line: 
while (getline(myFile, line)) 
{ 

, http://punchlet.wordpress.com에 있습니다.

0

여기에서 잘못하고 있기 때문에 나는 분명히 추락 할 것입니다. 당신이 밖으로

m_acMapData [4] [0]는 액세스하는 것이 메모리에 액세스하려고 할 때

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 = 3MAP_WIDTH = 6 ;

그리고 당신은 C/C에 해당 배열을 알고 있어야합니다 + +를 행하므로 전공 그 범위의.

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'; 
}