我对此代码的意图是制作一个含糊量的密码。
我可以使用gcc编译我的代码,但是当我运行程序并在命令行中传递2个字符串时,我遇到了分段错误。最初我试图在我的for循环中使用单独的if语句来控制j的int值,例如:
if( i % strlen(msg) == 0) {
j = 0;
}
else {
j++;
}
但是,我不清楚这是否会产生我的预期结果,在这个if语句中执行表达式,然后继续下一个if语句。所以,我替换条件语句并编译代码。但是,在两个情况下,我使用j。
中的任一方法都会出现分段错误#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
char *msg = argv[1];
char *key = argv[2];
int i, j, sl, ky, mg;
sl = strlen(key);
j = 1;
int encrypt[strlen(msg)];
if(isalpha(key) && argc == 3) {
;
}
else
perror("run program from cmd line with 2 strings \n");
return 1;
for(i = 1; i <= sl; i++) {
(i % strlen(key) == 0) ? j = 0 : j++;
mg = msg[i];
ky = key[j];
if(isalpha(msg[i])) {
if(isupper(msg[i])) {
msg[i] = 'A' + (('A' - msg[i]) + ('A' - key[j]) % 26);
}
else if(islower(msg[i])) {
msg[i] = 'a' + (('a' - msg[i]) + ('a' - key[j]) % 26);
}
else {
msg[i] = msg[i];
}
}
}
return 0;
}
答案 0 :(得分:-1)
好吧,我修正了一些疏忽,例如38行和42行。这段代码可以作为密码使用,但它只在某些时候有效。
for(i = 0; i < sl; i++) {
(i % strlen(key) == 0) ? j = 0 : j++;
mg = msg[i];
ky = key[j];
if(isalpha(msg[i])) {
if(isupper(msg[i])) {
encrypt[i] = 'A' + ((( msg[i] - 'A') + (key[j]) - 'A') % 26);
}
else if(islower(msg[i])) {
encrypt[i] = 'a' + (((msg[i] - 'a') + (key[j]) - 'a') % 26);
}
else {
encrypt[i] = msg[i];
}
}
}
for(i = 0; i < strlen(msg); i++) {
printf("%c", encrypt[i]);