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

CS50 PSET2 Substitution程序出现Segmentation Fault问题求助

CS50 Substitution 段错误定位与修复

段错误出现在strlen(key)行的核心原因:当你不带参数运行./substitution时,argv[1]是NULL空指针,而strlen()要求传入指向有效字符串的指针,对NULL调用strlen会直接触发内存访问错误。

你之前的代码肯定跳过了命令行参数数量的校验步骤——正确流程应该是:

  • 先判断argc是否等于2:
    • 若argc != 2,直接输出Usage: ./substitution key并退出程序,根本不会走到strlen(key)的逻辑。
    • 仅当argc == 2时,再将argv[1]赋值给key,接着做长度、有效性等验证。

示例修正后的核心逻辑:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    // 优先校验参数数量
    if (argc != 2)
    {
        printf("Usage: ./substitution key\n");
        return 1;
    }

    // 此时argv[1]必然有效,再处理密钥
    char *key = argv[1];
    if (strlen(key) != 26)
    {
        printf("Key must contain 26 characters.\n");
        return 1;
    }

    // 后续密钥合法性校验、加密/解密逻辑...
}

把参数数量校验放在最前面,就能避免无参数时的空指针访问,同时正常输出预期的usage错误提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 21:37:09