разыменованное значение * argv [] не точное - PullRequest
1 голос
/ 01 марта 2012

Я пытаюсь создать программу, которая находит наибольший простой множитель заданного значения.

Если я запускаю ./a.out 55, cout << "Input " << *argv[1]<< endl; возвращает 5 вместо 55.

Когда я вынимаю звездочку и проверяю значение `указателя (argv [1]), я получаю 55. Я запутался, почему это происходит.

int main(int argc, char *argv[])
{
    if(argc == 2)
    {
        cout << "Input  " << *argv[1]<< endl;
        // cout << "Biggest Prime Factor of 34 is : " << findPrime(number, 0) << endl;
    }
    else
        cout << "Too many inputs:" << endl;
    return 0;
}

Ответы [ 3 ]

2 голосов
/ 01 марта 2012

Проще говоря:

  • argv[1] - строка C, содержащая первый аргумент;
  • *argv[1] - первый символ этой строки.

Если последнее сбивает с толку, обратите внимание, что *argv[1] эквивалентно argv[1][0].

В итоге вы хотите:

cout << "Input  " << argv[1]<< endl;
2 голосов
/ 01 марта 2012

Бросить *:

cout << "Input  " << argv[1] << endl;
                    ^ 

Это потому, что *argv[1] означает первый символ argv[1]. Вы хотите всю строку вместо.

0 голосов
/ 01 марта 2012

argv - указатель на массив символов.

Затем вы, например, argv[0] получаете таблицу символов - например, некоторый текст.

Так что вам не нужно ставить звездочку передargv[0], если вы хотите скрыть текст под argv[0].

...