编译正常但调试时出现Segmentation Fault,求解决方法
问题解决:Segmentation Fault 调试问题
原代码
#include<stdio.h> #include<cs50.h> #include<ctype.h> #include<string.h> int main(int argc,string argv[]) { int len = strlen(argv[1]); if(argc != 2 ) { printf("Usage:./substitution key\n"); return 1; } }
问题原因
- 代码逻辑顺序错误:先执行
strlen(argv[1]),再判断命令行参数数量argc是否为2。 - 当未传入命令行参数时,
argv[1]为NULL,strlen函数无法处理空指针,直接访问无效内存地址,触发Segmentation Fault。
修复方案
调整代码执行顺序,先校验命令行参数数量,确认argv[1]有效后再调用strlen:
#include<stdio.h> #include<cs50.h> #include<ctype.h> #include<string.h> int main(int argc,string argv[]) { if(argc != 2 ) { printf("Usage:./substitution key\n"); return 1; } int len = strlen(argv[1]); // 后续业务逻辑可在此继续编写 }
内容的提问来源于stack exchange,提问作者Rufus
相关产品推荐
相关产品推荐

