argv在C ++中的清理

时间:2016-04-07 19:45:21

标签: c++ unix argv argc

所以我有这个赋值(输入一个字符串,它将显示字符串的数量),我必须解释为什么argv [0]值和argv [3]值改变。所以,当你单步执行程序时(我的字符串输入是"运行如何现在棕色牛" argv [0]作为我的目录文件夹开始(" / home / 013 / w / wn /%$ %$%#%/ Assignment4 / p2")。然后argv [3]以"现在"开始。我不明白为什么这些变量会在程序运行时发生变化,因为" now"字符串应该在argv [2]中,对吗?每当我的程序编译时,argv []数组对应于最后的所有内容,但为什么不在开头呢?

以下是代码:

#include <stdio.h>

/* print a given string and a number in a pre-determined format. */
void
print_string(int num, char* string)
{
    printf("String '%d' - '%s'\n", num, string);
}

int
main(int argc, char* argv[])
{
    int i;

    /* check for command line arguments */
    if (argc < 2) { /* 2 - 1 for program name (argv[0]) and one for a param. */
       printf("Usage: %s [<string> ...]\n", argv[0]);
        return(1);
    }

    /* loop over all strings, print them one by one */
    for (argc--,argv++,i=0 ; argc > 0; argc--,argv++,i++) {
        print_string(i, argv[0]);  /* function call */
    }

    printf("Total number of strings: %d\n", i);

    return 0;
}

1 个答案:

答案 0 :(得分:1)

数组索引从0开始,argv的第一个元素是执行文件的路径,例如,如果你像这样执行二进制文件:

./test run how now brown cow

您将在argv中获得以下元素:

argv[0] = "./test"
argv[1] = "run"
argv[2] = "how"
argv[3] = "now"
argv[4] = "brown"
argv[5] = "cow"

正如你所看到的,完全正确的是现在是第3个而不是第2个元素。