0

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

bcd abcd ab abc

因此,由于我们传递了 4 个参数,argc是 4 吗?我们将 i 初始化为 2,然后检查argv从 1 到 3 的 ' - 我的猜测是我们添加 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); 
}
4

2 回答 2

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

于 2013-08-12T19:31:57.227 回答
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.

于 2013-08-12T21:28:06.997 回答