C ++ Для проблемы цикла - PullRequest
       1

C ++ Для проблемы цикла

0 голосов
/ 25 сентября 2011

У меня есть цикл, который принимает два ввода, фамилию и идентификатор, а затем преобразует его в идентификатор пользователя. Код выглядит так:

   void User::setUserid(string ln, string id){
        string temp = "0";
        string temp2 = "0";
        for (int k = 0; k < 6; k++){
            temp += ln[k]; 
        }
        for (int i = id.length()-2; i<id.length(); i++){
            temp2 += id[i];
        }
        userid = temp+temp2;

    }

По какой-то причине, если я закомментирую первый цикл for, он будет компилироваться и компилироваться. Есть идеи, почему код вылетает?

Ответы [ 2 ]

3 голосов
/ 25 сентября 2011

Гарантируется ли ln как минимум шесть символов? Возможно, вы стреляете за конец строки.

В любом случае, вы выбрали медленный и сложный способ копирования частей строк. Этого должно быть достаточно:

void User::setUserid(string ln, string id){
    userid = "0" + ln.substr(0, 6) + "0" + id.substr(id.size() - 2);
}

Обратите внимание, что это приведет к сокращению идентификатора пользователя, если ln.size() < 6, и выбросит out_of_range, если id.size() < 2.

1 голос
/ 25 сентября 2011

Строка ln может содержать меньше символов, чем 6 - ln[k] будет за пределами.

Обратите внимание, что код завершится сбоем, если строка id содержит менее двух символов (i будет отрицательным).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...