В C вы должны тщательно продумать память, занимаемую вашими переменными и массивами.
Когда вы пишете char reversed[] = {}
, вы создаете новый массив нулевого размера. (Это, очевидно, не совсем правильный C, но - это , что происходит с компилятором gcc спрашивающего. В конце концов, отчет содержит ошибку сегментации во время выполнения, а не синтаксическую ошибку во время компиляции.)
Затем оператор reversed[length - i]
пытается записать данные в элемент массива, для которого у вас нет места, потому что reversed
не имеет размера.
У вас есть два варианта:
- Создайте массив
reversed
правильного размера (возможно, используя malloc
, как говорит @ Боб Кауфман) , а затем верните его из reverse()
функции .
- Переверните строку «на месте», сместив символы вокруг самого
string
.
Смена строки на месте, вероятно, предпочтительнее - если вы выделяете память динамически, вам придется беспокоиться о ее освобождении, что может быть проблемой.