如何将整数作为命令行参数?

我已经阅读了一个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[]
或某事,不确定......     
已邀请:
您需要使用
atoi()
将字符串转换为整数。     
上面的所有答案大致正确(Vikram.exe获取道具,解释为什么你必须调用库函数,没有其他人打扰)。但是,没有人命名正确的库函数来调用。不要使用
atoi
。不要使用
sscanf
。 如果您不想允许负数,请使用
strtol
或其相对
strtoul
。当输入不是数字时,只有这些函数可以为您提供足够的信息。例如,如果用户键入
./a.out 123cheesesandwich
atoi
sscanf
会愉快地返回123,这几乎肯定不是你想要的。只有
strtol
会告诉你(通过
endptr
)它只处理字符串的前几个字符。 (没有
strtoi
,但如果需要读取浮点数,则有
strtod
。)     
正如您已经在代码中使用的那样,
main
函数的原型是
int main (int argc, char** argv)
什么参数作为命令行参数提供,它们作为char *(或简称字符串)数组传递给你的'program'。因此,如果您将prog调用为
foo.exe 123
,则
foo.exe
的第一个参数将是字符串123,而不是整数值123。 如果您尝试将参数转换为整数(如您所说),可能使用以下内容:
(int) argv[1]
,您将不会获得第一个参数的整数值,而是第一个arg存储在地址空间中的某个内存地址。要获取整数值,必须将字符串值显式转换为整数值。为此,您可以使用
atoi
功能。查看本手册页,了解可用于转换的类似功能。     
使用
atoi
cvalue = atoi( optarg );
并将cvalue声明为
int
。     
atoi()
,表示ascii到integer是要使用的函数。同样,
atof()
可用于获取浮点值。     
在这种情况下,我会去
sscanf()
。     
不,你不能只是转换为将其转换为整数值。您需要使用sscanf,atoi,atol或类似功能对其进行转换。     

要回复问题请先登录注册