2013-08-12 2 views
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); 
} 
+3

argc is 5, not 4 – SheetJS

+2

'int main', а не' void main'. –

ответ

1

argc 5.

Эта программа проверяет каждая пара последовательных аргументов и подсчетов, сколько являются подстроки друг друга (либо первая подстрока второго или наоборот):

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

В этом случае, так как i=3 и i=4 соответствуют критериям, k является 7.

В повторяя код, самый внутренний для цикла выходит, если есть другой символ или если одна строка заканчивается. Строка if (!*p || !*q) k += i; увеличивает k только в том случае, если одна из строк попала в конец.

+0

Можете ли вы объяснить, почему argc 5, а не 4? и что будет argv [0]? – idjuradj

+0

, потому что имя программы является аргументом 1 – hetepeperfan

+1

@Nicholas первым аргументом (argv [0]) всегда будет имя вызываемой программы. Чтобы увидеть это, просто создайте программу, которая выполняет 'printf («% s \ n », argv [0]);», а затем запускайте ее напрямую. После этого переместите его в свой путь и вызовите его. – SheetJS

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

argv[0] Вы - название программы. например, a.out или что-то еще, что вы назвали. argv[1] ... - это параметры, которые вы передали программе. поэтому argc is 1+ paramNumberYouPassed.

Смежные вопросы