2013-11-20 3 views
-3

Я пытался решить этот вопрос, но не смог понять. Если следующая программа (MyProg) запускается из командной строки, как:Найти выход программы C

myprog friday tuesday sunday 

Что бы выход?

#include<stdio.h> 
int main(int argc, char *argv[]){ 
    while(sizeof argv) 
     printf("%s",argv[--sizeof argv]); 
    return 0; 
} 

Выход это-

sunday tuesday friday myprog 

Пожалуйста, объясните мне выход. Thanx :-)

+7

'-sizeof argv' является незаконным. Таким образом, ваша программа не может быть запущена из командной строки, поскольку она даже не может компилироваться. – Paul92

+2

Результат должен быть чем-то вроде «Ошибка: не может применяться« - »к rvalue». –

+1

Даже если он скомпилировался, он застрял бы в бесконечном цикле, когда вы его запустили, и сработает, когда вы выйдете за пределы argv. 'while (sizeof argv)' не заканчивается. – indiv

ответ

0

Ошибка:

lvalue required as decrement operand

Это не компилируется.

sizeof - оператор, такой как + или %, и он дает вам размер объекта. Таким образом, вы не можете уменьшить его. Так же, как somehting, как это не имело бы никакого смысла: --%

Суть вопроса:

What happens if the input is: myprog friday tuesday sunday

When the code does:

index = lastIndex 
while(index) // note: while(0) == false 
    print(array[--index]) 

Таким образом, выходной сигнал будет разворот элементов:

sunday tuesday friday

+0

plz проверить ссылку [link] {http://www.cquestions.com/2012/05/aptitude-questions-and-answers-in-c.html} –

+0

вопрос 21. тот же вопрос и выход - опция c. –

+0

Автор сделал ошибку. Я отредактирую свой ответ. – givanse

0

Не считая вопроса --sizeof, я предполагаю, что вы хотите знать об элементах argv. В нем содержатся аргументы и имя программы. Прочтите любое руководство или документ, описывающий argv.

0

Есть две проблемы в вашем коде:

  1. --sizeof argv is illegal. Это приведет к ошибке.

  2. while(sizeof argv) приведет к бесконечному циклу, как условие всегда будет истинным

Таким образом, в короткий код не скомпилируется и приведет к ошибке.

2

Я угадываю вас, что это такое. Он просто распечатывает аргумент командной строки назад.

#include<stdio.h> 

int main(int argc, char *argv[]) 
{ 
    while (argc) 
     printf("%s ", argv[--argc]); 

    printf("\n"); 

    return 0; 
} 
+0

thanx, но когда argc становится 0, тогда while (0), что означает false, то почему он печатает myprog. он напечатал бы до пятницы. –

+1

Потому что он использует * pre-декремент *. Когда 'argc' равно 1,' argv [- argc] 'is' argv [0] '. – Barmar

+0

Потому что --argc. Он печатает 3,2,1,0 элементов argv, пока цикл while не достигнет 0. – Duck

0

Вы, вероятно, хотите, чтобы понять командную строку обработки аргументов в C. Когда вы получаете некоторый список аргументов программы, например,

myprog friday tuesday sunday 

В языке Си аргументы основной функции() которые предоставляют количество аргументов (4 в этом случае) и массив символов char * (указатели) к этим аргументам.

Обратите внимание, что sizeof argv вычисляется во время компиляции, а значение представляет собой размер указателя на вашей системе (4 или 8).

Во-первых, мы объясним аргументы основной функции,

int main(
    int argc, //an integer count of the number of arguments provided to the program 
    char* argv[] //an array of pointers to character arguments 
) 

Ваша главная функция затем определяется (по-видимому), распечатываются аргументы, начиная с крайнего правого аргумента и работать обратно в ноль-го аргумента ,

{ 
    int argv_sizeof = argc; //you cannot use sizeof argv the way you specified 
    //argv_sizeof = 4 in your example, but argv[4] is not valid 
    //argv_sizeof has a value that is one past the rightmost element of argv[] 
    while(argv_sizeof) //use argv_sizeof > 0 here; argv_sizeof is 4,3,2,1,0 
         //when argv_sizeof reaches 0, the while loop terminates 
    { 
     printf("%s",argv[--argv_sizeof]); //here you pre-decrement argv_sizeof (3,2,1,0) 
     //then use argv_sizeof to index into argv[] 
     //then you print the string at argv[3], argv[2], argv[1], argv[0] 
    } 
    //argv_sizeof = 0 here 
    return 0; //you return the value 0 from the main function 
} 
Смежные вопросы