Zamiana funkcji na tablicę string

0

Witam,
Gdy zmieniam funkcje na tablicę string

string* fun()
{
    string fraza[256];
    fraza[0]="a";

    return fraza;
}

void fun2()
{
       string * fraza1;
       fraza1=fun();
}

To cały program mi szwankuje(np. do fraza1 dopisują się na końcu różne znaki itp), co robię źle?

dodanie znacznika <code class="cpp"> - fp

0

o_O
Bo zwracasz wskaźnik na lokalną tablicę która zaraz po wyjściu z funkcji fun() znika.

0
string* fun()
{
    string fraza[256];
    fraza[0]="a";
 
    return fraza;
}

Zmienna fraza (a zarazem dane, które przechowuje) istnieje jedynie w ciele funkcji fun; to co Ty robisz, to undefined behavior (ponieważ po wyjściu z tej funkcji dane te są automatycznie zwalniane, zatem wywołując fraza1=fun(); w zmiennej fraza1 znajdować będzie się niepoprawny wskaźnik).
Aby osiągnąć to, co starasz się zrobić, będziesz musiał ręcznie zaalokować pamięć oraz ją zwolnić.

0

A w jaki sposób mam to zrobić?

0

Napisz najpierw co chcesz osiągnąć. Bo przypuszczam że problem który chcesz rozwiazać jest trywialny tylko źle się do niego zabrałeś.

0
#include <vector>
#include <string>
...
 
vector<string> fun()
{
    vector<string> fraza;
    fraza.push_back("a");
 
    return fraza;
}
 
void fun2()
{
       vector<string> fraza1=fun();
       for (int i=0; i<fraza1.size(); i++)
              cout << fraza1[i] << endl;
}
0

Można jeszcze tak:

string *fun()
  {
   static string fraza[256]={"a"};
   return fraza;
  }

o ile chcesz zmieniać tą tablicę z zewnątrz. Ale najpierw się upewnij że nie chodzi ci o coś co zaproponował wyżej @Azarien

0

Dzięki wszystkim za odpowiedzi.

Zrobiłem tak i wszystko ładnie działa.

string fraza[256];

string* fun()
{
    fraza[0]="a";
 
    return fraza;
}
 
void fun2()
{
       string * fraza1;
       fraza1=fun();
}

dodanie znacznika <code class="cpp"> - fp

1 użytkowników online, w tym zalogowanych: 0, gości: 1