为什么使用atoi命令行参数进行分段错误

为什么使用atoi命令行参数进行分段错误,第1张

概述我需要传递两个命令行参数,我尝试了以下内容: #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); 我需要传递两个命令行参数,我尝试了以下内容:

#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命令行参数进行分段错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1216845.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存