2014-12-05 155 views
0

我想製作一個程序來重複通過一個字符串,並獲得23個元素的重疊(每個迭代中刪除父字符串的第一個元素)子字符串。我認爲外層循環不起作用。請幫助我瞭解發生了什麼事。for循環不工作 - 外循環不迭代

這是我使用的代碼的相關部分。

char *copy = (char*)malloc(sizeof(char)*(length+1)); 
strcpy(copy, seq); 

printf("%s\n %d", copy, strlen(copy)); 
char temp[26]= ""; 
int templen=0; 
for (int k=0; k>length; k++)  
{ 

    for (int i=0; i< 23; i++) 
    { 
     templen = strlen(temp);   
     temp[templen]=copy[i]; 
     templen++;     
    } 

    temp[templen+1] = '\0'; 
    printf("%s\n", temp); 
    temp[0]='\0'; 
    copy++; 
    printf("%s\n %d", copy, strlen(copy)); 
} 

free(seq); 
+1

這僅僅是外循環中的一個錯字,因此投票將其作爲「簡單錯字」關閉。 – Lundin 2014-12-05 07:58:20

回答

1
for (int k=0; k>length; k++) 

這種類型的代碼會給你要麼

  1. 無限循環

  • 非擊打條件。
  • 在這裏,這是點2。考慮具有值length> = 0,在for循環中的條件檢查將成爲一個失敗,所以它會不執行循環體。

    對於情況1,如果初始化k的某個值大於length的值,則將面臨無限循環,因爲k>length永遠不會變爲false。

    你應該改變你的病情檢查,以for (int k=0; k < length; k++)

    此外,你應該外側內for循環移動templen = strlen(temp);,或者,你可以省略語句本身和內部for循環之前初始化templen爲零。您的代碼中已有templen++;

    +0

    謝謝!問題是我切換時遇到了seg fault錯誤 - 這就是爲什麼我一開始就對布爾表達式產生困惑的原因。你有什麼想法,爲什麼我得到這個錯誤? – dp0618 2014-12-05 06:45:52

    +0

    @DonglimPark你可以多給點信息嗎?哪一行? – 2014-12-05 06:58:02

    +0

    @DonglimPark什麼是「長度」的值?如果它小於'22','copy [i];'無法訪問。 – 2014-12-05 07:11:17

    0

    你應該改變外環到:

    for (int k=0; k<length; k++) 
    

    你有錯誤的方式:

    for (int k=0; k>length; k++) 
    
    0

    試試這個..而不是

    for (int k=0; k>length; k++) 
    

    它應該是

    for (int k=0; k<length; k++) 
    
    1

    如果使用for循環,則可能是錯誤的條件語句。您已將條件設爲k>length。 由於條件始終爲假,所以循環不會迭代。將其更改爲for (int k=0; k<length; k++);