解释这个程序的输出?

时间:2013-08-12 19:27:23

标签: c argv argc

如果我们通过命令行传递以下参数,则以下程序的输出是什么:

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); 
}

2 个答案:

答案 0 :(得分:1)

argc是5。

该程序检查每对连续的参数并计算彼此的子串数(第一个是第二个的子串,反之亦然):

bcd abcd // i = 2
abcd ab  // i = 3, good
ab abc   // i = 4, good

在这种情况下,由于i=3i=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] ...是您传递给该计划的参数。所以argc1+ paramNumberYouPassed.