求解column permutation cipher总是出现中断异常

#include
#include

int main()
{
int i, j, l, k, m, num[30];
char key[30], plaintext[100], plaintext2[100], cipher[100];
printf("please input the key\n");
scanf_s("%s", key);
l = strlen(key);
for (i = 0; i < l; i++)
{
num[i] = 0;
for (j = 0; j < l; j++)
{
if (key[j] <= key[i])
{
num[i] = num[i] + 1;
}
if (key[j] == key[i] && j > i)
num[i] = num[i] - 1;
}
}
printf("please input the plaintext\n");
scanf_s("%s", plaintext);
k = strlen(plaintext);

i = 0;
for (m = k%l; m < l; m++)
{
    plaintext[k + i] = 'z';
    i++;
}

if (k%l == 0)
    m = k / l;
else
    m = k / l + 1;
printf("加密:\n");
for (i = 0; i < m; i++)
{
    for (j = 0; j < l; j++)
    {
        cipher[i*l + j] = plaintext[i*l + num[j] - 1];
    }
}
for (i = 0; i < l; i++)
{
    for (j = 0; j < m; j++)
        printf("%c", cipher[j*l + i]);
}
printf("\n");

printf("解密:\n");
for (i = 0; i < m; i++)
{
    for (j = 0; j < l; j++)
    {
        plaintext2[i*l + num[j] - 1] = cipher[i*l + j];
    }
}
plaintext2[(i - 1)*l + j] = '\0';
printf("%s\n", plaintext2);
return 0;

}

http://www.pudn.com/downloads361/sourcecode/crypt/detail1568065.html