Перевод из int в char* внутри функции работает, а если вернуть строку то нет

shinarthas

Надо перевесит int в char* в методе класса, и вернуть char*. Перепробовал кучу всего результат 1 и тот же. boss.cpp
char* boss::getitem()
{
    int radix = 10;  //система счисления
    char buffer[20]; //результат
    char *p;  //указатель на результат
    p = itoa(podc,buffer,radix);
    //если тут будет cout все будет норм 
        return p;
}
фактически это гетер.queue.cpp
void queue::save()
{
 
    int value;
    FILE *Ptr;
 
    Ptr=fopen("kadrs.txt","w");// что бы продолжать записть поменять w  на w+
    char danila[100];//куда ж без этого?
 
    if (    typeid(*data)==typeid(boss) )
        fprintf(Ptr,"%s","1");
    if (    typeid(*data)==typeid(engeneer) )
        fprintf(Ptr,"%s","0");
 
        fprintf(Ptr,"%s","\n");
        fprintf(Ptr,"%s",data->getitem());
        fprintf(Ptr,"%s","\n");
        strcpy( danila, (data->getname()).c_str()); //криво но менять все долго
        fprintf(Ptr,"%s",danila);
        fprintf(Ptr,"%s","\n");
        fprintf(Ptr,"%d",data->getage());
        fprintf(Ptr,"%s","\n");
 
 
    fclose(Ptr);
 
}
Тут я использую абстрактные классы и хочу их записать в файл. Итог если p=22;(до того как я его вернул), то в kadrs.txt нечего нет (речь о "p" а не о kadrs.txt в целом ). Ну или же p= ММ̘ш ; если:
char* boss::getitem()
{
    char a[10];
    int b = 12;
    *a = (char)podc;
    return a;
}
может кому пригодится boss.h
#include <string>
using namespace std;
class boss : virtual public kadr
{    
    int podc; // людей в подчинении
    public:
        //конструкто и диструктор
        boss(){}
        boss ( int p,string n,int a):kadr(n,a)
    {
        podc=p;
    };
        ~boss();
        virtual void show();    
        virtual char* getitem();    
};
1 ответ

shinarthas

shinarthas, возвращается указатель на локальный массив buffer, который будет уничтожен при выходе из функции getitem. Либо надо передавать в getitem ранее выделенный буфер, либо выделять внутри getitem память динамически.