2016-09-27 2 views
-2

구조체에 정보를 구문 분석하고 테스트를 시도 할 때 "문자열 subscript가 범위를 벗어났습니다."라는 오류 메시지가 계속 표시되는 곳에서이 할당을 수행합니다. 내가 어디로 잘못 갔는지 알지 못한다."문자열 첨자가 범위를 벗어났습니다."오류가 발생했습니다.

다음은 빈 표준 : : 문자열 객체를 생성하고 특정 위치에 문자를 할당하는 경우 여기 내 기능

baby_type Parse_Line(const std::string line) 
{ 

baby_type baby; 
std::string name; 
std::string year;// = "0000"; 
std::string total; 
int i = 0; 
int k = 1; 
int LengthOfOccurences = 0; 
int DigitOfOccurences = 0; 

while (line.at(i) != ',') { 
    name[i] = line.at(i); 
    i++; 
} 
baby.name = name; 
i++; 

while (k < 100) { 
    if (line.at(i) == ',') { 
     year.resize(LengthOfOccurences); 
     baby.yearsCount.at(k) = std::stoi(year); 
     //year = "0000"; 
     i++; 
     k++; 
     DigitOfOccurences = 0; 
     LengthOfOccurences = 0; 
    } 
    else { 
     year.at(DigitOfOccurences) = line.at(i); 
     i++; 
     LengthOfOccurences++; 
    } 
} 

int m = 0; 
int LengthOfLine = line.length(); 

while (i < LengthOfLine) { 
    total.at(m) = line.at(i); 
    m++; 
    i++; 
} 

baby.total = std::stoi(total); 

return baby; 
} 
+0

무엇을 의미합니까 –

+0

길이를 확인하기 전에'line'에서 많은 문자를 읽고 있습니다. 한눈에, while 루프는 쉼표 수를 읽을 때만 종료되기 때문에'line.at (i)'호출은 쉼표가 100 개 미만인 경우'line'의 끝에서 실행됩니다. 당신은'line'의 끝에 도달합니다. –

+0

@ Ren 개선을 추가하십시오. 당신은'i' 변수를 증가시키고 있으며이 명령 중 하나가 범위를 벗어납니다. 당신은 그것을 제한해야합니다. 코드를 확인한 후에도'year.at (DigitOfOccurences) = line.at (i);'행이 문제가 될 것이라고 확신합니다. 다시 작성하십시오. – Fr333du

답변

-1

인 구조체

struct baby_type { 

std::string name; 
std::vector<int> yearsCount; 
    int total; 
} ; 

입니다. std :: strings는 그렇게 작동하지 않습니다. 첫 번째 while 루프에서

name.append(1,line.at(i)); 

사용하는 간단한 표준 : 매개 변수로 단지 문자로 추가가 없기 때문에 '1'이 필요하다.

+0

'push_back'은 어떨까요? – Rakete1111

+0

바로 사용할 수 있습니다. – Rene

관련 문제