구조체에 정보를 구문 분석하고 테스트를 시도 할 때 "문자열 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;
}
무엇을 의미합니까 –
길이를 확인하기 전에'line'에서 많은 문자를 읽고 있습니다. 한눈에, while 루프는 쉼표 수를 읽을 때만 종료되기 때문에'line.at (i)'호출은 쉼표가 100 개 미만인 경우'line'의 끝에서 실행됩니다. 당신은'line'의 끝에 도달합니다. –
@ Ren 개선을 추가하십시오. 당신은'i' 변수를 증가시키고 있으며이 명령 중 하나가 범위를 벗어납니다. 당신은 그것을 제한해야합니다. 코드를 확인한 후에도'year.at (DigitOfOccurences) = line.at (i);'행이 문제가 될 것이라고 확신합니다. 다시 작성하십시오. – Fr333du