Неправильный вывод массива символов

Возможный дубликат:
Указатель на локальную переменную

#include <iostream>
using namespace std;

char* func();

int main() {
char* str;
str = func();
cout<<str;
return 0;
}

char*  func() {
char * str;
char p[] = "priyanka is a good girl";
str = p;
cout<<str<<"\n";
return str;
}

дает вывод,

Приянка хорошая девушка

priy

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

1

Решение

В func2() char p[] локальная переменная, инициализированная в стеке Возвращение указателя на переменную стека является плохой идеей (и также неопределенным поведением), и я думаю, что ваша строка «priyanka is a good girl» была перезаписана при возврате функции.

1

Другие решения

Ваша функция func() возвращает указатель на локальную переменную, которая позже вызывает неопределенное поведение при попытке доступа к ней.

4