Почему я получаю сег-фа - PullRequest
0 голосов
/ 22 марта 2019

Так что прошу прощения за общий вопрос.Я не смог найти ничего, что говорило бы о моем конкретном случае.Если что-то есть и я пропустил это, извините.

Я пишу функцию, которая переворачивает строку.Это для проекта, который идет с некоторыми довольно конкретными рекомендациями.Мне не разрешено использовать какие-либо функции, такие как malloc, printf и т. Д., И моя функция должна возвращать строку, переданную в качестве аргумента.Функция должна быть прототипирована следующим образом:

char *ft_strrev(char *str);

Это моя функция:

char *ft_strrev(char *str)
{
     int i;
     int j;
     char c;

     i = 0;
     j = ;
     c = '0';
     while(str[j] != '\0')
         j++;
     while(i != j)
     {
         c = str[i];
         str[i] = str[j];
         str[j] = c;
         i++;
         j--;
     }    
}

Когда я вызываю это в main и проверяю с помощью puttr https://github.com/kigiri/userpref/blob/master/ft_42/ft_putstr.cон компилируется нормально, но во время выполнения я получаю ошибку сегмента.

Что я делаю не так?

1 Ответ

2 голосов
/ 22 марта 2019

Есть две проблемы с вашим кодом (кроме этого j =; материала.

  1. После первого while посмотрите, что j указывает на '\0' после конца строки, а недо последнего символа строки.
  2. Условие второго просмотра действительно обрабатывает ситуацию, когда j - i изначально нечетное, например, если i равно 0 и j равно 1Первоначально, затем, после первой итерации, i будет 1, а j будет 0, поэтому условие все равно будет выполнено.

Вот фиксированный код:

char *ft_strrev (char *str)
{
    int i = 0, j = 0;
    while (str [j] != '\0') j++;
    while (i < --j) {
        char t = str [i];
        str [i++] = str [j];
        str [j] = t;
    }    
    return str;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...