2017-10-23 1 views
0

WHOIS 기록 파일을 읽습니다. 샘플 파일의 첫 번째 줄은 편집기에서 읽습니다 : "ID : 0--0.ga는"ifstream read : 여분의 바이트는 어디서 오는가?

코드에서, 내가 첫 번째 줄로 시작하는지 확인하기 위해 확인 "ID :"다음과 같이

나는이 작업을 수행 할 때
// given ifstream * fs, 
char id[3]; 
streampos pos = fs-> tellg(); 
fs -> read(&id[0],3); 
fs -> seekg(pos); 

if (// id[3] is "id:" ... 

, (내가 디버거를 실행하고, 더 나아가 오히려 GCC보다는 그 소리로 컴파일), 나는 id에서 다음과 같은 결과를 얻을 :

Strange stuff in id char array.

문자가 읽기 , 'i', 'd'및 ':'이외에 :

\xb87#_? 

여기서 물음표 앞에는 정지 기호가 있습니다. 나는 적절한 길이의 배열로 3 바이트를 읽는 동안 "여분의"것을 읽는 방법을 확신 할 수 없다.

또한 if 문은 true로 평가된다.

이 오류는 코딩 실수 일 수도 있고 디버거 오류 일 수도 있고 다른 일이있을 수 있습니까?

+5

nope - 디버거가 첫 번째 null까지 문자열을 표시합니다. ID 4 바이트를 만들고 id [3]을 \ 0 – pm100

+0

@ pm100으로 설정해야합니다. 감사합니다. – bordeo

+0

@ pm100 당신은 몇 가지 upvotes가 나타납니다. 왜 누군가가 이유를 설명하고 대답을 받아들이 길 원한다면 몇 분 동안 떠납니다. 그렇지 않으면 삭제할 것입니다. – bordeo

답변

0

디버거는 id에 문자열이 포함되어 있다고 가정합니다. 디버거가 이해할 것으로 예상되는 형식으로 저장되지 않은 것을 볼 때 디버거를 무시해야합니다.

대안은 디버거의 디스플레이를 원시 메모리 내용으로 정신적으로 변환 한 다음 올바른 형식으로 원시 메모리 내용을 정신적으로 구문 분석하는 것입니다. 우리는 문자열을 포함하고있는 것으로 이해하면 "id : \ xb87 # _? ..."를 의미하는 메모리 영역을 가지고 있으므로 동일한 메모리 영역이 3 문자의 배열로 이해된다면 "id : ".

관련 문제