【发布时间】:2015-09-18 11:13:39
【问题描述】:
我需要传递两个命令行参数,我尝试了以下方法:
#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?
如果我输入 ./program 2 3 一切正常,这让我认为发生分段错误是因为我尝试访问当时不属于我的内存位置。
【问题讨论】:
-
@amdixon 先生,void power() 究竟是如何返回整数的?
-
因不正确而被删除。
-
"这个问题是不是因为我尝试访问 argv[1] 和 argv[2] 并且当我键入 ./program 时它们不存在?"是的。你不能使用不存在的数据。
-
@Lundin 谢谢,我有 99% 的把握,这就是问题的原因。
标签: c