2011-04-21 2 views
3

그래서 프로그램을 작성 중이며 일부는 문자열 배열을 처리하는 것이며 문자열 배열의 각 요소에서 모든 양방향 코드를 추출하려고합니다. 그 문자열을 다른 배열에 배치하십시오. substr 함수를 사용하여이 작업을 시도하고 그것을 조정하려고했지만 OOR 오류가 계속 발생합니다.기본 질문, 오류 : substr 범위를 벗어났습니다.

코드 읽

"numwords은"문자열 배열 단어 의 개수 "lowpunct"문자열 배열

for(i=0; i<numwords;i++) 
{     
    for(x=0; x<=lowpunct[i].length()-2;x++) 
    { 
     if(lowpunct[i].length()-2 <=0) 
     { 
      bigram[count]=lowpunct[i]; 
      count++; 
     } 
     else 
     { 
      bistring=lowpunct[i].substr(x,2); 
      bigram[count]=bistring; 
      count++; 
      bistring=""; 
     } 
    } 
} 
+0

몇 가지 대답을 수락합니다. – EnexoOnoma

+0

무엇을 의미합니까? – Sam

+0

루프의'<='는 의도적입니까? –

답변

0

문자열 :: 길이() size_t로는 인 이는 부호가 없습니다. 따라서 길이가 2보다 작은 문자열이 발견되면 문제가됩니다.

if(lowpunct[i].length()-2 <=0) 

이는 부호없는 정수가 언더 플로우 된 결과가 숫자가 가장 큰 값으로 줄 바꿈되기 때문입니다. for 루프 조건도 잘못되었습니다. 당신이 lowpunct 0에서가는

for(x=0; x+2 <= lowpunct[i].length();x++) 
if(lowpunct[i].length() <= 2) 
+0

어떻게 그렇게? 뭐라고 제안하나요? – Sam

+0

@Sam, 편집 참조 – ergosys

+0

글쎄, 당신은 정확했다 : P하지만 당신은 왜 더 간단한 용어로 설명 할 수 있 었는가? "unsigned integer underflowing"에 익숙하지 않습니다. – Sam

0

루프에서 [I] .length() - 2 :

그들에게 이런 일을 다시 작성

. (크기 -2 포함). 즉, 단 한 문자 남았음을 의미합니다. for 루프의 "< ="을 "<"으로 변경하십시오.

관련 문제