如果我们通过命令行传递以下参数,则以下程序的输出是什么:
bcd abcd ab abc
那么,既然我们传递了4个参数,那么argc
是4?
我们将i初始化为2,然后从1到3检查argv
- 我的猜测是我们将i = 2添加,然后在下一次迭代中i = 3,然后是5,所以输出会是5?
void main(int argc, char* argv[])
{
char *p, *q;
int i = 2, j = 0, k = 0;
for (; i < argc; i++)
{
p = argv[i-1];
q = argv[i];
for (j = 0; *q && *p; j++, p++, q++)
{
if (*p != *q)
{
break;
}
}
if (!*p || !*q)
{
k += i;
}
}
printf("%d",k);
}
答案 0 :(得分:1)
argc
是5。
该程序检查每对连续的参数并计算彼此的子串数(第一个是第二个的子串,反之亦然):
bcd abcd // i = 2
abcd ab // i = 3, good
ab abc // i = 4, good
在这种情况下,由于i=3
和i=4
符合条件,k
为7。
如果存在不同的字符或者一个字符串结束,则分解代码,最内层的for循环退出。只有当其中一个字符串结束时,if (!*p || !*q) k += i;
行才会增加k
。
答案 1 :(得分:0)
Can you explain why is argc 5, and not 4? and what would be argv[0]?
argv[0]
是你程序的名字。比如a.out
或你命名的其他东西。 argv[1] ...
是您传递给该计划的参数。所以argc
是1+ paramNumberYouPassed.