Гарантируется ли 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
.