【问题标题】:strlen(*argv) produces an unusual resultstrlen(*argv) 产生异常结果
【发布时间】:2017-12-19 23:16:17
【问题描述】:

我运行以下只是为了好玩,但无法解释结果。假设./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");
}

【问题讨论】:

  • WTF? 字符串位于 argv[1]
  • argv[0] 是程序本身,在本例中为./test。但是,you cannot rely on this.
  • *argv./test,然后是 6 个字符长。
  • argc 是 argv 中的字符串数。 argv[0] 是您的程序的名称,在本例中为“./test”,长度为 6。
  • *argvargv[0]。为什么你期望argcstrlen(argv[0]) 之间有任何联系?这是两个完全不相关的值。

标签: c command-line-arguments argv argc


【解决方案1】:

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

  1. 调用的程序名称 --> "./test"
  2. “WTF?”。

所以在您的示例中,strlen(argv[0]) 将打印 6,strlen(argv[1]) 将打印 4。

【讨论】:

  • 正确且理解。我没有意识到我对 strlen(*argv) 所做的是为 strlen(argv[0]) 写了一个同义词。感谢您的回复!
【解决方案2】:

例如,如果您在命令行中运行gcc -o myprog myprog.c,您将得到以下信息:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 2015-02-16
    • 2019-01-26
    相关资源
    最近更新 更多