运行C语言整数乘法程序参数不足时报Segmentation fault问题求助
问题排查与修复方案
存在的问题
main函数参数定义错误:第二个参数应该是字符串数组char *argv[](或等价的char **argv),你当前定义的char *argv是单个字符指针,类型不匹配会导致数组访问逻辑完全错误。- 执行顺序错误:你在判断参数数量
argc == 3之前,就已经尝试访问argv[1]、argv[2]并执行atoi转换。当仅运行./mul时argc=1,argv[1]属于越界访问非法内存,直接触发段错误,根本不会执行到后面的参数判断逻辑。 - 语法错误:两行
atoi转换语句末尾缺少分号,会导致编译失败,属于代码粘贴遗漏或编写疏忽。
修复方法
调整执行顺序,先判断参数数量是否符合要求,参数合法的前提下再做整数转换和乘法计算,同时修正argv的参数定义、补全语句分号。
修正后的完整代码如下:
#include <stdio.h> #include <stdlib.h> int main (int argc, char *argv[]) { if (argc != 3) { printf("Error\n"); return 1; } int x = atoi(argv[1]); int y = atoi(argv[2]); printf("%d\n", x * y); return 0; }
内容的提问来源于stack exchange,提问作者Sangwani
相关产品推荐
相关产品推荐

