#include <stdio.h>
#include <cs50.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int main(int argc, string argv[]) {
for (int i = 0; i < strlen(argv[1]); i++) {
if (isalpha(atoi(argv[i]))) {
printf("Usage: ./caesar key\n");
return 1;
}
}
int k = atoi(argv[1]);
if (argc == 2) {
string pt = get_string("plaintext: ");
printf("ciphertext: ");
char ct[strlen(pt)];
for (int i = 0; i < (strlen(pt)); i++) {
if (isalpha(pt[i]) && isupper(pt[i])) {
ct[i] = ((pt[i] - 65) + k) % 26;
printf("%c", ct[i] + 65);
} else if (isalpha(pt[i]) && islower(pt[i])) {
ct[i] = ((pt[i] - 97) + k) % 26;
printf("%c", ct[i] + 97);
}
}
printf("\n");
}
else if (argc != 2) {
printf("Usage: ./caesar keyn\n");
return 1;
}
}
如果我通过20倍,它必须告诉我(用法:./ caesar) 而不是我得到细分错误,为什么! 谁能帮助我,我会胜过
答案 0 :(得分:3)
您的第一个循环遍历第一个命令参数中的字符数,并尝试访问该索引的命令参数。因此,如果您只有一个命令自变量,但该自变量具有2个以上的字符,则您将尝试访问数组数组末尾的argv
中的元素。