strlen(* argv)产生不寻常的结果

时间:2017-07-14 19:00:37

标签: c command-line-arguments argv argc

我只是为了好玩而运行以下内容,但无法解释结果。假设./test WTF?在命令行运行,产生的输出是 WTF? 6 2。为什么报告的argc值(2 - 正如预期的)和strlen(* argv)之间存在如此巨大的差异,后者变为6.我知道字符串数组并不是strlen正在寻找的,但是,我认为它产生的价值(如果它产生任何东西)将合理地接近argc。想法?

#include <stdio.h>
#include <ctype.h>
#include <string.h>

int main(int argc, char**argv)
{
    for (int i = 1; i < argc; i++)
    {
        for (int j = 0; j < strlen(argv[i]); j++)
        {
            printf("%c", argv[i][j]);

        }
        printf(" ");
    }
    printf("\t%lu\t%d", strlen(*argv), argc);
    printf("\n");
}

2 个答案:

答案 0 :(得分:5)

这里没有错。 argv数组包含两个字符串 -

  1. 调用的程序名称 - &gt; &#34; ./试验&#34;
  2. &#34; WTF&#34;
  3. 因此,在您的示例中,strlen(argv[0])将打印6,strlen(argv[1])将打印4。

答案 1 :(得分:3)

例如,如果在命令行中运行gcc -o myprog myprog.c,您将获得以下内容:

argc
4 
argv[0]
   gcc 
argv[1]
   -o 
argv[2]
   myprog 
argv[3]
   myprog.c

因此,对于您的情况,当您运行{{1}时,您将获得6(./test的{​​{1}}长度)而不是4(argv[0] WTF?的长度)在命令行中。