c - 分段故障铿锵
问题描述
#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),而不是我得到分段错误的原因!谁能帮助我,我会很感谢
解决方案
您的第一个循环遍历第一个命令参数中的字符数,并尝试访问该索引的命令参数。因此,如果您只有一个命令参数,但该参数有超过 2 个字符,那么您将尝试访问argv
数组末尾之外的元素。
推荐阅读
- c# - IComparer 比较枚举的值
- c# - 如何减去两个以上的数字
- c++ - 为什么这不在编译时计算?(常量表达式)
- javascript - JavaScript - 递归构建树形数据结构
- python - 为什么即使我设置 fit_intercept= False,我的回归模型也会返回截距?
- java - 如何创建nodejs xmpp服务器和android xmpp客户端
- java - 在由文件 java 生成的数组列表中查找子字符串
- rspec - 为什么模型在重新加载后包含数据库中的旧数据?
- mysql - PhpMyAdmin 列搜索
- python - 库在 Spyder 中运行良好,但在 PyCharm 中却不行