혼합 문자로 된 데이터 파일을 효율적으로 읽고 읽는 방법은 무엇입니까? 예를 들어 다른 파일, 32 비트 정수, 문자 및 문자열에서로드 된 데이터가 혼합 된 데이터 파일이 있습니다. 현재 fstream 객체를 사용하고 있지만 int32 나 문자열 끝에 도달하면 중지됩니다. 데이터 파일의 문자열 끝 부분에 무작위 데이터를 추가하면 파일의 나머지 부분을 따라 간다. 이로 인해 문자열에 null-termination이 추가되었다는 것을 믿을 수 있습니다. 다음은 파일의로드의 예C++에서 데이터 파일을 읽고 구문 분석하는 적절한 방법은 무엇입니까?
void main()
{
fstream fin("C://mark.dat", ios::in|ios::binary|ios::ate);
char *mymemory = 0;
int size;
size = 0;
if (fin.is_open())
{
size = static_cast<int>(fin.tellg());
mymemory = new char[static_cast<int>(size+1)];
memset(mymemory, 0, static_cast<int>(size + 1));
fin.seekg(0, ios::beg);
fin.read(mymemory, size);
fin.close();
printf(mymemory);
std::string hithere;
hithere = cin.get();
}
}
왜 수의 정수 또는 문자열에서 읽은 후이 코드 정지? 어떻게이 문제를 해결할 수 있을까요? 이러한 유형의 파일을 다룰 때 잘못된 접근 방식입니까? fstream을 전혀 사용하지 않아야합니까?
멋진 콘텐츠. 나는 cout << mymemory [i]를했고 나는 데이터를보고있다. ... ish. 그걸 확인해 줘서 고마워. 만약 내가 파일의 처음 4 문자가 "마크"와 나는 파일의 나머지 부분을 읽기 전에 그것을 확인하고 싶다는 걸 알았어, C에서 쉬운 구문 분석 방법은 + +이 어색한 데이터를 다루는가? – Mark
사실 그것은 다른 질문 일 것입니다. 지금 받아 들여라. – Mark
@ 마크 : 물론. 분명히, 만약 당신의 '매직 넘버'가''mark ''이외의 것이라면 분명히 숫자 항목이있는 문자 배열로 변경해야 할 것입니다 (if strncmp ("mark", memory, 4) 쉽게 입력 할 수있는 문자에는 해당하지 않습니다. – Novelocrat