좋아, 그래서 한 번에 1 장씩 읽으려는 거대한 파일이 있습니다. 챕터는 '$'
으로 구분됩니다. 저는 C++에 익숙하지 않습니다. 그래서 저는 C/C++에서 기대했던대로 장에서 읽을만한 것을 만들었습니다.C++은 특정 구분 기호가 될 때까지 텍스트 파일을 읽습니다.
#include <nds.h>
#include <stdio.h>
#include <string>
#include <vector>
#include <sstream>
int dataFileLoc = 7;
std::string fileReader(){
FILE * dataFile;
std::string chapterBuffer = "";
const int buffersize = 1024;
char charBuffer[buffersize];
bool foundEnd = false;
dataFile = fopen("xc3_.tsc", "rt");//open data file
fseek(dataFile,dataFileLoc,SEEK_SET);
while(!foundEnd){
fread(charBuffer,1,buffersize,dataFile);
for(int i=1; i<buffersize; i++){
if(charBuffer[i] == '$'){
foundEnd = true;
charBuffer[i] = '\0';
dataFileLoc = ftell(dataFile)-(buffersize-i);
break;//break to spare some time
}
}
chapterBuffer.append(charBuffer);
}
fclose(dataFile);//done with the file for now.
checkerTemp(chapterBuffer);
return chapterBuffer;
}
결과가 좋을 것입니다. 아직 파일 끝에 도달하지 못했습니다. 그래서 거기에서 실패 할 수도 있습니다. 그러나 겉으로보기에는 무작위로 보입니다 (일관성이 있지만 겉으로는 임의의 위치). 이 오류로 인해 문자열에 정크 데이터가 주입되고 (8 문자 상당) 일반 데이터가 다시 표시됩니다.
누구나이 문제를 일으킬 수있는 아이디어가 있습니까? 아니면이 사람에게 적절한 C++ 방법이 있습니까? 문자열 판독기로 뭔가? 당신의 while 루프 경우, 주위
chapterBuffer.append(charBuffer);
이 종료되지 문자를 추가하려고 할 것입니다 후 문을 루프이다
-Smileynator
['std :: getline'] (http://en.cppreference.com/w/cpp/string/basic_string/getline)을 확인하십시오. 물론 C++ [입력/출력 기능] (http://en.cppreference.com/w/cpp/io)에 대해 더 자세히 알아야합니다. –
'getline (file, data, '$')'를 사용하여 20 줄의 코드를 하나의 코드로 대체합니다. – john
버퍼의 첫 번째 문자가 스캔되지 않습니다. for (int i = 0; ... '를 사용하십시오. – suspectus