如何将整数作为命令行参数?
我已经阅读了一个getopt()示例,但它没有显示如何接受整数作为参数选项,例如
cvalue
将在示例的代码中:
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int
main (int argc, char **argv)
{
int aflag = 0;
int bflag = 0;
char *cvalue = NULL;
int index;
int c;
opterr = 0;
while ((c = getopt (argc, argv, "abc:")) != -1)
switch (c)
{
case 'a':
aflag = 1;
break;
case 'b':
bflag = 1;
break;
case 'c':
cvalue = optarg;
break;
case '?':
if (optopt == 'c')
fprintf (stderr, "Option -%c requires an argument.n", optopt);
else if (isprint (optopt))
fprintf (stderr, "Unknown option `-%c'.n", optopt);
else
fprintf (stderr,
"Unknown option character `\x%x'.n",
optopt);
return 1;
default:
abort ();
}
printf ("aflag = %d, bflag = %d, cvalue = %sn",
aflag, bflag, cvalue);
for (index = optind; index < argc; index++)
printf ("Non-option argument %sn", argv[index]);
return 0;
}
如果我以testop -c foo
运行上述,cvalue
将是foo
,但如果我想要testop -c 42
怎么办?由于cvalue
的类型为char *
,我可以将optarg
变成(int)
吗?我已经尝试过这样做而不使用getopt()
并直接访问argv[whatever]
,并将其转换为整数,但是当使用%d
打印时,我总是会得到一个较大的负数。我假设我没有正确地解释argv[]
或某事,不确定......
没有找到相关结果
已邀请:
7 个回复
慷祈霖黑
将字符串转换为整数。
粟痢凰副
。不要使用
。 如果您不想允许负数,请使用
或其相对
。当输入不是数字时,只有这些函数可以为您提供足够的信息。例如,如果用户键入
和
会愉快地返回123,这几乎肯定不是你想要的。只有
会告诉你(通过
)它只处理字符串的前几个字符。 (没有
,但如果需要读取浮点数,则有
。)
蹄寄噬非芹
函数的原型是
什么参数作为命令行参数提供,它们作为char *(或简称字符串)数组传递给你的'program'。因此,如果您将prog调用为
,则
的第一个参数将是字符串123,而不是整数值123。 如果您尝试将参数转换为整数(如您所说),可能使用以下内容:
,您将不会获得第一个参数的整数值,而是第一个arg存储在地址空间中的某个内存地址。要获取整数值,必须将字符串值显式转换为整数值。为此,您可以使用
功能。查看本手册页,了解可用于转换的类似功能。
嗓瑰
。
并将cvalue声明为
。
乐遣杀屎
,表示ascii到integer是要使用的函数。同样,
可用于获取浮点值。
凄挡
。
抵浮细