簡體   English   中英

解釋該程序的輸出?

[英]Explain the output of this program?

如果我們通過命令行將以下參數傳遞給以下程序,則該程序的輸出是什么:

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

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

Can you explain why is argc 5, and not 4? and what would be argv[0]? 

argv[0]是您的程序名稱。 例如a.out或您命名的其他名稱。 argv[1] ...是您傳遞給程序的參數。 所以argc1+ paramNumberYouPassed.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM