大佬教程收集整理的这篇文章主要介绍了为什么使用atoi命令行参数进行分段错误,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#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; }
输出:
直到这里的一切都没问题,但是如果在变量中保存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时它们不存在?
是的,问题是您在验证命令行是否存在之前尝试访问命令行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命令行参数进行分段错误所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。