【发布时间】: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。
-
*argv是argv[0]。为什么你期望argc和strlen(argv[0])之间有任何联系?这是两个完全不相关的值。
标签: c command-line-arguments argv argc