2012-02-13 3 views
1

모든 구문 분석 예제를 본 적이 있지만 문자열이나 다른 임의의 메서드를 사용하여 문제를 해결할 수 없습니다. 내 문제는 내가 텍스트 파일에서 읽을 때 내가 추출한 토큰에 토큰 자체와 무작위 문자 및 기호가 더해져 나온다는 것입니다. 예를 들어, 텍스트 파일의 줄은 ... 입니다. create_device digital_controller "Left Turn Lamp"51 ... 그리고 내 포인터 배열 * tklist []로 각 토큰을 가리킬 수 있어야합니다. 그러나 내가 구문 분석하고 지적하면 - ... ... 비슷한 방식으로 서로 다른 토큰을 가져 오는 것과 함께. 다음은 토큰을 추출하기위한 코드입니다. 위치를 확인하고 두 번 확인했기 때문에 토큰 위치가 정확하다고 가정합니다. 그렇지 않으면 문자 혼란에 포함시킬 단어의 일부만 얻게됩니다. 클라인은 '숯불 클라인 []'로 선언하고 당신은 당신의 CString을의 끝에서 널 (NULL) 종료를 필요 라인char 데이터 형식을 사용하여 C++에서 문자열 구문 분석

token_length = endTokenPosition - startTokenPosition; //length of the token 

tklist[next_token] = (char *)malloc(token_length + 1); 

memcpy(tklist[next_token], &cline[startTokenPosition], token_length + 1); 

cout << tklist[next_token] << endl; 
+3

당신의 NUL 터미네이터입니까? –

답변

5

의 문자 배열입니다.

1

토큰을 tklist[next_token]에 복사했지만 null 문자로 종료하지 않았으므로 cout이 끝까지 계속됩니다. 당신은 시도 할 수 중 하나

memset(tklist[next_token], '\0', token_length + 1); 
memcpy(tklist[next_token], &cline[startTokenPosition], token_length); 

또는

memcpy(tklist[next_token], &cline[startTokenPosition], token_length); 
tklist[text_token][token_length] = '\0';