Vigenere Cipher - 分段错误

问题描述 投票:0回答:1

我正在尝试创建一个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;
}
c vigenere
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.