Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Функция выдает строку


Автор: aush 27.8.2007, 12:07
Доброго времени суток!

Столкнулся с проблемой. Вроде просто, но что что-то странное у меня получается....

Итак: имеется функция
Код

char *harrquality(...)
{
AnsiString res2;
res2=...
char *res;
res=res2.c_str();
...
return res;}

Внутри функции все нормально, значения присваиваются. НО. При вызове функции:
Код

{
...
char *te;
te=harrquality(...);}

Переменная te получает ""

Вопрос: где может быть глюк?

Автор: dumb 27.8.2007, 12:21
Цитата(aush @  27.8.2007,  13:07 Найти цитируемый пост)
char *res;
res=res2.c_str();

нажми F1 и найди описание c_str.

Автор: Fazil6 27.8.2007, 12:23
Цитата(aush @  27.8.2007,  12:07 Найти цитируемый пост)
Вопрос: где может быть глюк?

не вижу никакого глюка. Работает именно так как ты и написал в коде. Ты пытаешься возвратить указатель на внутренний буфер переменной AnsiString res2 , но при выходе из твоей функции эта переменная удаляется вместе со своим буфером. Поэтому и имеешь то, что имеешь. 
Возвращай AnsiString
Код

 AnsiString harrquality(...)
{
AnsiString res2;

...
return res2;}

Автор: 586 27.8.2007, 12:25
ни какой это не глюк. объект res2 уничтожается при выходе из функции, а char *res - это указатель на буффер в объекте AnsiString res2

Автор: aush 27.8.2007, 13:47
dumb,
смотрел, работает как раз правильно и именно так, как и надо...
 
Fazil6, 
586, 
Спасибо! Так и думал, что глюк надо искать в кривых руках))

Просто странно, я с самого начало сделал дословно так, как написал Fazil6, т.е. выдавал сразу строку, но у меня по той же причине кривых рук что-то не заработало, вот и стал выкручивать. Как ни странно сейчас все заработало!))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)