2011-09-25 275 views
0

我有一个循环需要两个输入,一个姓氏和一个ID,然后将其转换为用户ID。代码如下所示:C++ For循环问题

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

有什么症状? –

+1

你提供了什么'ln'和'id'? – Howard

+0

你知道ln总是长度为6吗? –

回答

3

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

+0

当姓氏=亚当斯崩溃时,所以我认为它与该事情有关 – Nick

+0

@Nick哦,你一定是在开玩笑吧! –

+0

@Konrad对不起,我正在学习如何编程。这件事情对我来说并不是很清楚。 – Nick

1

字符串ln可能会少于6个字符 - ln[k]将超出范围。

请注意,如果id字符串包含少于两个字符(i将为负数),代码将会崩溃。