gpt4 book ai didi

c - 为什么使用 atoi 命令行参数出现段错误

转载 作者:太空狗 更新时间:2023-10-29 16:01:15 25 4
gpt4 key购买 nike

我需要传递两个命令行参数,我尝试了以下操作:

#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;
}

输出:

michi@michi-laptop:~$ ./power
Usage ./power arg2 arg2
(EG: ./power 2 3)
michi@michi-laptop:~$ ./power 2 3
Res = 8

到这里为止一切正常,但是如果将 argv[1]argv[2] 保存在这样的变量中:

int base = atoi(argv[1]);
int exp = atoi(argv[2]);

我得到了段错误

代码:

#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[]) {

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],argv[0]);
exit(1);
}else{
power(base, exp);
}

printf("\n");
return 0;
}

但是当我在 printf 中使用 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;
}

我的问题是:

这个问题是因为 Atoi 造成的吗?

发生这个问题是因为我尝试访问 argv[1]argv[2] 但当我键入 ./program< 时它们不存在/strong>?

如果我输入 ./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?

是的,问题是您在验证命令行参数是否存在之前尝试访问它们。

在第二个示例代码片段中,仅在确保输入可用后才将值分配给变量 baseexp

int base;
int exp;

if (argc != 3) {
printf("Usage %s arg2 arg2\n(EG: %s 2 3)\n",argv[0],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])仅当它们作为命令行参数传递时程序被执行。

关于c - 为什么使用 atoi 命令行参数出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32650612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com