You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CS50 PSET2 Substitution替换密码运行出现Segmentation fault错误求助

问题根因

你触发段错误的核心原因是checker数组定义过小,发生栈越界访问:

  • 你定义的int checker[25];只能存储25个元素,下标范围为0~24
  • 你输入的测试明文The quick brown fox jumps over the lazy dog长度为43(包含空格),远大于25,遍历明文的过程中当s >= 25时,checker[s]访问了不属于数组的内存空间,直接触发段错误。

修复方案

  1. 首先修改checker数组的定义,长度和输入明文长度保持一致即可,对应代码修改为:
string input1 = get_string("plaintext: ");
int checker[strlen(input1)]; // 按输入明文长度动态定义数组大小
  1. 额外修复一处逻辑漏洞:你当前代码先执行string key1 = argv[1];再判断argc != 2,如果用户运行时没有输入密钥参数,会直接访问空指针argv[1]触发崩溃,建议调整逻辑顺序,先校验参数数量再赋值密钥:
// 调整顺序为先校验参数数量
if (argc != 2)
{
    printf("Usage: ./substitution key\n");
    return 1;
}
string key1 = argv[1]; // 参数合法后再读取密钥
  1. 你定义的string input2 = input1;全程没有被使用,可以直接删除避免冗余。

修改完成后重新编译运行即可正常输出密文。

内容的提问来源于stack exchange,提问作者Naufal Alfa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:42:02