在argv中查找参数的数量?

时间:2016-10-14 06:32:02

标签: c arguments

这样简单:

int main(int argc, char* argv[]) {
    int size = sizeof(argv);
    printf("%d", size);
}

如果我传递5个参数,它会告诉我4个参数。如果我传递10个参数,它会告诉我4个参数。这里有什么问题或者我的编译器搞砸了吗?

2 个答案:

答案 0 :(得分:0)

int size = sizeof(argv);

这不会给您argv数组中参数的数量,而是给您argv变量的大小(以字节为单位)。在我回答这个问题时,指针通常是四个或八个,在您的特定情况下,显然是四个。

如果您想知道argv中有多少个项目,那完全是{em> argc的用途。

argc整数保存参数的数量,包括第一个通常表示正在运行的程序的参数。因此,您可以使用如下循环获取参数:

#include <stdio.h>
int main(int argc, char *argv[]) {
    for (int i = 0; i < argc; ++i) {
        printf("Argument #%d is %s\n", i, argv[i]);
    }
    return 0;
}

运行带有特定参数的命令可将其显示为有效

pax$ ./testprog abc def 123 789
Argument #0 is ./testprog
Argument #1 is abc
Argument #2 is def
Argument #3 is 123
Argument #4 is 789

另一种方法,因为它强制argv[argc]必须为NULL指针,所以绕过计数并直接检查值:

#include <stdio.h>
int main(int argc, char *argv[]) {
    for (char **arg = argv; *arg != NULL; ++arg) {
        printf("Argument is %s\n", *arg);
    }
    return 0;
}

输出略有不同,因为我没有使用计数器,但是参数完全相同:

pax$ ./testprog pax diablo
Argument is ./testprog
Argument is pax
Argument is diablo

答案 1 :(得分:0)

请参阅gcc here

中的文档

报价:

  

argc参数的值是命令行的数量   论点。 argv参数是C字符串的向量;它的元素   是各个命令行参数字符串。的文件名   向量中还包含正在运行的程序作为第一个元素;   argc的值计入此元素。空指针始终跟随   最后一个元素:argv [argc]是此空指针。

     

对于“ cat foo bar”命令,argc为3,argv具有三个元素,   “猫”,“ foo”和“酒吧”。

argc本质上是要知道在命令行中传递的命令行参数总数。甚至在命令参数中也列出了可执行文件的名称(如果您想知道为什么-请看here(高级))。

因此,作为一个简短的答案,argc - 1将为您提供参数总数。检查argc以确认是否传递了所需的最少数量的参数是一种非常普遍的编程习惯。