2014-02-26 45 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

相关问题