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

C strlen(*argv)产生一个不寻常的结果,c,command-line-arguments,argv,argc,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(i

我运行以下只是为了好玩,但不能解释结果。假设在命令行上运行了
/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");
}
#包括
#包括
#包括
int main(int argc,字符**argv)
{
对于(int i=1;i
这里没有问题。
argv
数组包含两个字符串-

  • 调用的程序名-->“/test”
  • “WTF?”

  • 因此,在您的示例中,
    strlen(argv[0])
    将打印6,而
    strlen(argv[1])
    将打印4。例如,如果在命令行中运行
    gcc-o myprog myprog.c
    ,您将获得以下信息:

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

    因此,对于您的情况,当您在命令行中运行
    /test WTF?
    时,您将得到6(长度
    /test
    ,而不是4(长度
    WTF?
    argv[1]
    ),在这种情况下,
    WTF?
    字符串位于
    argv[1]
    argv[0]
    是程序本身,
    /test
    。但是,.
    *argv
    /test
    ,那么6个字符长。argc是argv中字符串的计数。argv[0]是您的程序名,在本例中,“/test”的长度为6。
    *argv
    argv[0]
    。为什么您希望在
    argc
    strlen(argv[0])
    之间有任何类型的连接?这是两个完全不相关的值。正确且理解。我没有意识到我对strlen(*argv)所做的是为strlen写了一个同义词(argv[0])。谢谢你的回复!