我有一个循环,它接受两个输入,一个姓氏和一个ID,然后将其转换为用户ID。代码如下所示:
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循环,它将编译和构建。代码崩溃的任何想法?
答案 0 :(得分:3)
ln
保证至少有六个字符吗?你可能会在弦乐的末尾射击。
无论如何,你选择了一种缓慢而复杂的方式来复制部分字符串。这应该足够了:
void User::setUserid(string ln, string id){
userid = "0" + ln.substr(0, 6) + "0" + id.substr(id.size() - 2);
}
请注意,如果ln.size() < 6
,则会生成较短的用户ID,如果out_of_range
则会生成id.size() < 2
。
答案 1 :(得分:1)
字符串ln
的字符数可能少于6 - ln[k]
将超出范围。
请注意,如果id
字符串包含少于两个字符(i
将为负数),代码将会崩溃。