2017-04-12 74 views
0

下面的代碼在'temp'中複製'str'中的每一個其他元素,但是如果我只增加'* str'一旦它給了我一個分割錯誤(core dumped)。 我試圖將字符串的所有偶數字母都複製到'even'數組中,與奇數字母相同('even'是第二個字母,第四個,第六個等等)。但是我意識到,當我增加它保持遞增。我真的不知道如何解決這個問題,所以我嘗試將函數存儲在函數內的不同數組中,但出現了分段錯誤。我不明白爲什麼增加兩次是可以的,但一旦沒有。分割錯誤(核心轉儲)

#include <stdio.h> 
#include <string.h> 
#define N 100 

void encrypt(const char*); 

int main(void) 
{ 
    char str[N]; 
    printf("Please enter a message: "); 
    gets(str); 

    encrypt(&str); 
return 0; 
} 

void encrypt(const char *str) 
{ 
    int i, j, length; 
    char temp[N], odd[N], even[N]; 

    length = strlen(str); 

    for (j = 0; *str < *str + length; *str++, *str++, j++) 
    { 
     temp[j] = *str; 
    } 
    printf("%s", temp); 
} 
+0

你怎麼知道'j'不超過'N'? – DyZ

+4

'* str <* str + length'解釋你的[橡皮鴨](https://en.m.wikipedia.org/wiki/Rubber_duck_debugging)這行代碼的作用。 –

+0

並顯示你如何調用'encrypt'。 –

回答

2

我想你其實想這​​樣寫:

for (j = 0; str < str + length; *str++, *str++, j++) 

可能這樣寫這是一個比較明確的:

for (j = 0; str < str + length; str++, str++, j++) 

但這是錯誤的呢,因爲str < str + length永遠是真的。

這是你所需要的:

for (j = 0; j < length; j++) 
{ 
    temp[j] = *str; 
    str += 2; 
} 
+1

請注意代碼示例不相同。雖然'str Matthias

+0

@Matthias正確,回答編輯。 –

+0

這可以工作,但最後還是有一些雜亂的隨機字符。就像我輸入'Hello'一樣,它會被存儲在'temp''Hello' – Str8Dev