столкнулся со странной проблемой, никак не пойму в чем дело...
есть такая вот функция:
char* Prohod::GetSelectString()
{
if(id == 0)
return "select * from prohod";
AnsiString sql = "select * from prohod where id="+IntToStr(id);
return sql.c_str();
};
Все вроде нормально, теперь проблема:
когда создали объект и вызываем GetSelectString(), то внутри нее
формируется строка:
"select * from prohod where id=1"
я это точно видел, она такая до самого выхода из функции, затем,
принимаем результат:
char* s = obj->GetSelectString();
возвращается такая вот стрка: "select * from prohod where i,"
что не так???
Здравствуйте, h256, Вы писали:
H>столкнулся со странной проблемой, никак не пойму в чем дело...
H>есть такая вот функция:
H>H>char* Prohod::GetSelectString()
H>{
H> if(id == 0)
H> return "select * from prohod";
H> AnsiString sql = "select * from prohod where id="+IntToStr(id);
H> return sql.c_str();
H>};
H>
Это Вам еще повезло, что возвращается что-то толковое.
В строке
AnsiString sql = "select * from prohod where id="+IntToStr(id)
в СТЕКЕ создается объект AnsiString sql. Но это как раз не столь важно.
Важно то, что при вызове
return sql.c_str()
также в СТЕКЕ создается временная переменная — массив char, указатель на который и вернет Ваша функция. А так как содержимое стека при выходе из функции фактически теряется, никто не может поручиться за результат ее работы.
А почему бы Вам не переписать обьявление функции и не возвращать сразу AnsiString?
... Вы часом не с java перескочили? Я за собой часто таких тараканов замечаю — это все сборка мусора развращает!
Поступай так, чтобы максима своей воли в любое время могла стать принципом всеобщего законодательства.
Здравствуйте, h256, Вы писали:
H>столкнулся со странной проблемой, никак не пойму в чем дело...
H>есть такая вот функция:
[]
H>что не так???
Переписать срочно на такое:
AnsiString Prohod::GetSelectString()
{
if(id == 0)
return "select * from prohod";
AnsiString sql = "select * from prohod where id="+IntToStr(id);
return sql;
};
И щастье будет!
F>И щастье будет!
Всем спасибо, сейчас переделаю и видимо оно и правда будет