C 从命令行调用值的简单方法?
我目前有:C 从命令行调用值的简单方法?,c,C,我目前有: int main(int argc, char* argv[]){ char* array = argv[1]; char* test = argv[2]; char*p; char*q; long check; long checker; check = strtol(array, &p, 3); checker = strtol(test, &q, 3); printf("Check: %ld\n", che
int main(int argc, char* argv[]){
char* array = argv[1];
char* test = argv[2];
char*p;
char*q;
long check;
long checker;
check = strtol(array, &p, 3);
checker = strtol(test, &q, 3);
printf("Check: %ld\n", check);
}
在每次调用新值时不必创建新变量(p、q、check、checker),从命令行调用值的更快/更有效的方法是什么?ie…/程序1 2 3
另外,为什么“/program-9 2 3”中的-9这样的值返回0?为什么
-9
失败?因为您为strtol()
指定了一个三元
输入,它只使用数字0..2
在一个循环中进行比较简单
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
long check = 0;
int i;
for (i=1; i<argc; i++) {
check = strtol(argv[i], NULL, 3);
printf("arg %d = %ld\n", i, check);
}
return 0;
}
您是否将3
传递到strtol()
,因为您认为您正在从命令行传递3个输入?如果您不是真的希望输入为三值
,那么此修订版应该满足您的要求
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
long check = 0;
int i;
for (i=1; i<argc; i++) {
check = atol(argv[i]);
printf("arg %d = %ld\n", i, check);
}
return 0;
}
你必须再加一点。p、q、check、checker的用途是什么?为什么要将
%ld
格式化指令与test
一起使用,这是一个字符*
类型的对象?这是未定义的行为。@YasirMajeed:它们只是用来转换输入到参数中的数字(学习C的第一天我不确定这是否是你问的问题for@BLUEPIXY@Fuzxxl我的错误是,修改了代码,然后是使用atoi和atol等函数的最佳解决方案。这些函数分别将字符串转换为int和long。而不是首先将它们复制到char*,而是直接将argv[i]转换为atol(argv[index])对不起,我是个新手,strtol的三元输入到底是什么?我通过了3,因为我认为它应该表示“三位数”编辑:刚刚看到您所做的编辑,这正是我想要的。三元是输入字符串所使用的基数。例如,二进制、三元、八进制、十进制、十六进制。如果您将10
而不是3
,则可以工作。但是strtol()
仅转换一个数字。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
long check = 0;
int i;
for (i=1; i<argc; i++) {
check = atol(argv[i]);
printf("arg %d = %ld\n", i, check);
}
return 0;
}
F:\WORK\MYTOOLS\CTEST>test -9 2 3 111
arg 1 = -9
arg 2 = 2
arg 3 = 3
arg 4 = 111