Vigenere Cipher - 分段错误

时间:2014-02-26 20:57:47

标签: c vigenere

我正在尝试创建一个vigenere密码,我遇到了分段错误。我很新,如果有人可以提供帮助,我将非常感激。提前谢谢。

// 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;
}

1 个答案:

答案 0 :(得分:0)

这是my_key(argv[i])for (int j = 0, n = my_key(argv[i]); j < n; j++)

你只接受两个论点。因此argv[]的大小为2.如果i>=2,则数组的索引超出范围。因此它可能会给出分段错误错误。