我需要传递两个命令行参数,我尝试了以下方法:
#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,一切都正常,这使我认为分段错误是因为我尝试访问此时不属于我的内存位置。