Ошибка сегментации с argv - PullRequest
1 голос
/ 27 марта 2012

У меня есть программа, которая читает один аргумент из командной строки и выполняет над ним определенные операции.Я использую argv и argc.Когда я не могу передать аргумент в программу, он segfaults.Я попытался проверить, не является ли значение argc определенным значением, а затем распечатать его, но он все еще имеет ошибки.Вот код, о котором идет речь.Обратите внимание, что он работает, как ожидалось, когда передается один аргументВот этот код:

int main(int argc, char *argv[])
{

int numTimes = atoi(argv[1]);           //converts content of argv[1] into integer

if(argc != 2)
{
        printf("Enter a valid integer.");
}

Ответы [ 3 ]

6 голосов
/ 27 марта 2012

Вам нужно проверить argc , прежде чем попытаться получить доступ к этому аргументу. Просто переместите тест argc на некоторое время, прежде чем позвонить atoi(argv[1]).

5 голосов
/ 27 марта 2012

Просто проверьте количество аргументов, прежде чем пытаться получить доступ к определенному элементу.Как то так:

int main(int argc, char *argv[]) 
{ 

    if(argc < 2)
    { 
        printf("Enter a valid integer."); 
        return 0;
    }

    int numTimes = atoi(argv[1]); // now we're sure to have at least 1 argument passed

    // ...
}
2 голосов
/ 27 марта 2012

Вы должны выполнить проверку , прежде чем попытается получить доступ к аргументам.

...