@famousman204

Почему не переворачивает строку?

Добрый вечер! Помогите понять в чём ошибка...
Есть такой код:
#include <stdio.h>
#include <string.h>

char	*ft_strrev(char *str)
{
	char tmp;
	int start_len;
	int end_len;

	start_len = 0;
	end_len = 0;
	while (str[end_len])
		end_len++;
	end_len -= 1;
	while (start_len <= end_len)
	{
		tmp = str[end_len];
		str[end_len] = str[start_len];
		str[start_len] = tmp;
		start_len++;
		end_len--;
	}
	return (str);
}

int		main(void)
{
	char *str = "hello";
	ft_strrev(str);
	printf("%s", str);
	return (0);
}

В итоге получаю ошибку SIGSEGV
gdb говорит что ошибка вылетает при первой итерации на строке:
str[end_len] = str[start_len];
Что не так?
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Что не так?
char *str = "hello";

Вот эта строчка не так. То, что компилятор разрешает так делать -- это анахронизм и отсутствие мало-мальской диагностики. "hello" может находиться (и в твоём случае, похоже, и находится) в области памяти доступной только для чтения, изменять эту строку нельзя. Правильно было бы написать так:
char str[] = "hello";
Если сделать эту замену, то код будет выделять место для массива str на стеке, менять такой массив можно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
#include <iostream>
#include <string>
#include <algorithm>
 
int main()
{
   std::string str = "test string";
   
   std::reverse(str.begin(), str.end());
   
   std::cout << str << std::endl;
 
   return 0;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы