2014-02-26 44 views
0

我正在嘗試創建一個vigenere密碼,並且出現了分段錯誤。我是相當新的,如果有人能幫忙,我將非常感激。先謝謝你。Vigenere Cipher - Segmentation Fault

// Mukul Patel February 26, 2014 
int my_key(string key) 
{ 
    int key_length = 0; 
    while (key[key_length] != '\0') 
     key_length++; 

    return key_length; 
} 

int main(int argc, string argv[]) 
{ 
    if (argc != 2){ 
     printf("Please only enter two arguments which are non-numerical\n"); 
     return 1; 
    } 

    string key = argv[1]; 

    string plaintext = GetString(); 

    for (int i = 0, length = strlen(plaintext); i < length; i++){ 
     for (int j = 0, n = my_key(argv[i]); j < n; j++){ 
      if(isupper(plaintext[i])) 
       plaintext[i] = ((((plaintext[i] - 'A') + (key[j % strlen(key)] - 'A')) % ALPHABET) + 'A'); 
      else if(islower(plaintext[i])) 
       plaintext[i] = ((((plaintext[i] - 'a') + (key[j % strlen(key)] - 'a')) % ALPHABET) + 'a'); 
      else 
       plaintext[i] = plaintext[i]; 

      printf("%c", plaintext[i]); 
     } 
    }  
    printf("\n"); 

return 0; 
} 
+0

什麼是輸入? – EkoostikMartin

+0

鍵:abcdabcd 明文:這是一個測試! – Mukul215

+3

什麼是字符串類型?我沒有聽說過C中的一個。什麼是'GetString'?你是否#包含任何文件?他們是哪一個?他們是標準的嗎?如果不是,他們的內容是什麼? *簡而言之:請提供一個[「簡短,自包含,可編輯的示例」](http://www.sscce.org/)。* – ArjunShankar

回答

0

此:my_key(argv[i])符合for (int j = 0, n = my_key(argv[i]); j < n; j++)

您只接受兩個參數。所以argv[]的大小是2.如果i>=2,則數組的索引超出邊界。所以它可能會導致分段錯誤。

+0

非常感謝你,現在有道理。我將不得不將其改爲argv [1]。 – Mukul215

相關問題