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
相关产品推荐
相关产品推荐

