Я пытаюсь создать код, который отображает заданные аргументы в обратном порядке, но почему он говорит мне об ошибке сегментации? - PullRequest
0 голосов
/ 08 января 2019

Как видите, я пытаюсь создать код, который отображает заданные аргументы в обратном порядке. но это продолжает давать мне ошибку сегментации. Я пытался и пытался понять это, но не понимаю почему. Пожалуйста, дайте мне добрый совет и объяснение. Спасибо всем

#include <unistd.h>

void ft_putchar(char c)
{
    write(1, &c, 1);
}

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

    i = argc;
    while(i > 0)
    {
        j = 0;
        while(argv[i][j] != '\0')
        {
            ft_putchar(argv[i][j]);
            j++;
        }
        i--;
        ft_putchar('\n');
    }
    return(0);
}

1 Ответ

0 голосов
/ 08 января 2019

В следующей строке кода:

while(argv[i][j] != '\0')

когда i == argc, вы получите доступ к нулевому указателю, и дальнейшее индексирование будет неопределенным поведением, которое в этом случае приведет к ошибке сегментации.

Указатель на массив указателей на многобайтовые строки с нулевым символом в конце, которые представляют аргументы, передаваемые программе из среды выполнения (argv[0] - argv[argc-1]). Значение argv[argc] гарантированно равно 0.

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