#include <stdio.h>#include <stdlib.h>voID power(int base,int exp){ int res=1; while(exp!=0){ res *= base; --exp; } printf("Res = %d",res);}int main(int argc,char *argv[]) { if (argc != 3) { printf("Usage %s arg2 arg2\n(EG: %s 2 3)\n",argv[0],argv[0]); exit(1); }else{ power(atoi(argv[1]),atoi(argv[2])); } printf("\n"); return 0;}
输出:
06001
直到这里的一切都没问题,但是如果在变量中保存argv [1]和argv [2],就像这样:
int base = atoi(argv[1]);int exp = atoi(argv[2]);
我得到Segmentation故障
码:
#include <stdio.h>#include <stdlib.h>voID power(int base,char *argv[]) { int base = atoi(argv[1]); int exp = atoi(argv[2]); if (argc != 3) { printf("Usage %s arg2 arg2\n(EG: %s 2 3)\n",argv[0]); exit(1); }else{ power(base,exp); } printf("\n"); return 0;}
但是当我在printf中使用Atoi时一切都还可以:
#include <stdio.h>#include <stdlib.h>voID power(int base,char *argv[]) { if (argc != 3) { printf("Usage %s arg2 arg2\n(EG: %s 2 3)\n",atoi(argv[2])); } printf("\n"); return 0;}
我的问题是:
这个问题是因为Atoi而发生的吗?
这个问题发生是因为我试图访问argv [1]和argv [2]并且当我输入./program时它们不存在?
如果我输入./program 2 3一切正常,这让我认为发生了分段错误,因为我试图访问那时不属于我的内存位置.
解决方法is this issue happen because I try to access argv[1] and argv[2] and they are not exists when I type ./program?
是的,问题是您在验证命令行是否存在之前尝试访问命令行arg.
在第二个示例代码段中,仅在确保输入可用后才将值分配给变量base和exp.
int base;int exp;if (argc != 3) { printf("Usage %s arg2 arg2\n(EG: %s 2 3)\n",argv[0]); exit(1);}else{ /* Assign the values here,as it is verifIEd that arg's are obtained from cmd line*/ base = atoi(argv[1]); exp = atoi(argv[2]); power(base,exp);}
在上面的程序中,只有当程序执行时它们作为命令行参数传递时,才能确保引用args(argv [1]和argv [2]).
总结以上是内存溢出为你收集整理的为什么使用atoi命令行参数进行分段错误全部内容,希望文章能够帮你解决为什么使用atoi命令行参数进行分段错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)