-1
그래서 런타임 오류를 디버깅하고 있습니다. "문자열 첨자가 범위를 벗어났습니다."문자열 첨자가 범위를 벗어남 C++ : 디버그
나는 어디에 문제가 있으며 무엇이 원인인지 알고있다. 그러나 나에게 오류를주지 않고서도 비슷하게 또는 똑같은 방식으로 수행 할 수있는 가능한 해결책을 찾고있다.
다음은 오류가 발생한 부분의 코드입니다. 내가 틀렸다고 정정하면 0 번째 길이의 문자열을 선언하고 n 번째 요소를 조작하려고하기 때문에 문제가 발생합니다. Btw은 문제가이 줄을이었다 관심이 누구를위한
std::string VsuShapeLine::GetRunwayNumber()
{
std::string name, nbstr, newnbstr, convnbstr;
int idx,idx2, num, count, pos;
char buf[3];
int idx3=-1;
name = this->GetName();
idx = name.find("ALight");
if (idx == -1)
{
idx = name.find("Lights");
idx3 = name.find_last_of("Lights");
}
idx2 = name.find('_');
idx2 +=3;
nbstr = name.substr(idx2, idx-idx2);
if (idx3 != -1)
idx3++;
else
idx3 = idx+6;
if (name.at(idx3) == 'N')
{
pos = nbstr.length();
if (isalpha(nbstr[idx-1]))
nbstr[pos-1] = _toupper(nbstr[pos-1]);
return (nbstr);
}
else if (name.at(idx3) == 'F')
{
convnbstr = nbstr.substr(0,2);
num = atoi(convnbstr.data());
num +=18;
_itoa(num, buf, 10);
newnbstr = buf;
count = nbstr.size();
if (count > 2)
{
if (nbstr.at(2) == 'l' || nbstr.at(2) == 'L')
newnbstr += 'r';
else if (nbstr.at(2) == 'r'|| nbstr.at(2) == 'R')
newnbstr += 'l';
else if (nbstr.at(2) == 'c' || nbstr.at(2) == 'C')
newnbstr += 'c';
}
pos = newnbstr.length();
if (isalpha(newnbstr[pos-1]))
newnbstr[pos-1] = _toupper(newnbstr[pos-1]);
return (newnbstr);
}
return ("");
}
어쩌면 당신은 당신의 쟁점 인 것처럼 보이는'idx'가 무엇인지를 보여줄 수 있습니다. –
전체 코드이고 문자열이 실제로 비어있는 경우 색인을 생성 할 수 없습니다. –
당신은 그것을 선언하고 그것에 색인을 붙이려고하는 사이에 무엇이든지'nbstr'을합니까? 'pos'가 0이면 확실하게'nbstr [pos-1]'은 런타임에 맞는 시작을줍니다. –