Вы выделяете свою строку в стеке, а затем возвращаете указатель на нее. Когда ваша функция вернется, любые распределения стека становятся недействительными; указатель теперь указывает на область в стеке, которая, вероятно, будет перезаписана при следующем вызове функции.
Чтобы сделать то, что вы пытаетесь сделать, вам нужно сделать один из следующее:
malloc
или аналогичного, затем верните этот указатель. Затем вызывающему абоненту необходимо вызвать free
, когда это будет сделано с памятью.