Параметр командной строки в C - PullRequest
0 голосов
/ 09 февраля 2019

Я получаю ошибку сегментации, когда задаю свой программный параметр «2» или «3».Это должно напечатать Это номер два / три.В чем здесь ошибка?

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    if (argc > 1) {
        if (*argv[2] == '2') {
            printf("That's number two!");
        }       
        else if (*argv[2] == '3') {
            printf("That's number 3!");
        }   

        else
            printf("Error.\n");
    }
    else
        printf("No input given.\n");
    return 0;
}

Когда я запускаю программу, я набираю ./Test 2 или 3. Я не могу найти ошибку, и gcc также не выдает ошибок / предупреждений.Спасибо.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019
if (*argv[1] == '2') {
        printf("That's number two!");
    }       
    else if (*argv[1] == '3') {
        printf("That's number 3!");
    }   

Индекс начинается с 0.

argv [0] - это имя программы, а argv [1] - первый параметр командной строки.

0 голосов
/ 09 февраля 2019

argv - это массив:

argv[0] // the name of the executable
argv[1] // the first argument
argv[...]

Когда вы делаете:

if (*argv[2] == '2')

и вам звонили с ./Test 2, есть только один аргумент, поэтому argv[2] - доступ за пределами допустимого диапазона.

Для получения дополнительной информации см. основная функция .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...