BCB5: проблема со строчками...
От: h256 Россия  
Дата: 07.01.04 20:34
Оценка:
столкнулся со странной проблемой, никак не пойму в чем дело...
есть такая вот функция:

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,"

что не так???
Re: BCB5: проблема со строчками...
От: Hunta Украина http://dr-leafsey.livejournal.com
Дата: 08.01.04 03:16
Оценка:
Здравствуйте, 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 перескочили? Я за собой часто таких тараканов замечаю — это все сборка мусора развращает!
Поступай так, чтобы максима своей воли в любое время могла стать принципом всеобщего законодательства.
Re: BCB5: проблема со строчками...
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 08.01.04 09:43
Оценка:
Здравствуйте, 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;
};


И щастье будет!
Re[2]: BCB5: проблема со строчками...
От: h256 Россия  
Дата: 08.01.04 10:11
Оценка:
F>И щастье будет!

Всем спасибо, сейчас переделаю и видимо оно и правда будет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.