简单的问题:怎么返回字符串

gloom 2002-07-24 04:18:47
形如
char* function(char* str);
的函数,如果要对str进行操作后返回新的串,怎么返回啊?一般我要存储新的串都是建一新变量(长度不定),如char* myStr=new char[LEN];如果直接将此新串返回,那myStr还没来得及delete,岂不是会造成内存泄漏?难道要分配一块固定的可能的最大内存块如char[2048]?
注:不能返回AnsiString,
...全文
27 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
gloom 2002-08-01
  • 打赏
  • 举报
回复
TO:  airspace(笨鸟)
   hailulu_wang(没啥)
因为我要把这个串返回,把以不能提前delete,

TO: pp616(傻小子)
不是在所有的情况下都可以操作参数的。

我自己的找到一个方法:
用char* str="";创建一个空串,再用strcpy()将new 创建的串复制到str.将str delete掉,返回str就可以了。

这个问题我回复了很多次都不能回复成功,一直拖到现在。
WieldWolf 2002-08-01
  • 打赏
  • 举报
回复
关注
kingcaiyao 2002-08-01
  • 打赏
  • 举报
回复
这样:
char* Function(char *str)
{
......
String sResult;
sResult=StrPas(str);
return sResutl.c_str();
....
}

gloom 2002-07-26
  • 打赏
  • 举报
回复
我知道方法了就是创建一个空串,char* str="";再将要返回的内容用strcpy复制到这个串里,删除其它串,将这个串返回就可以了,

//为什么我老是不能回复。
gloom 2002-07-25
  • 打赏
  • 举报
回复
CSDN现在怎么这么奇怪,我十次有八次不能回复啊
gloom 2002-07-25
  • 打赏
  • 举报
回复
TO: airspace(笨鸟)
我想返回这个串,所以不能先delete,可以也不能等返回吧后再来delete

TO: hailulu_wang(没啥)
char* function(const char* str)
{
int len=strlen(str);
char* MyStr=new char[len+7];
strcpy(MyStr,"TestStr");
strcpy(MyStr+7,str);
return MyStr;
}
这时就会发生资源泄漏,因为MyStr没有被删除,
不过我找到了解决方法,就是再用一个空串
char* function(const char* str)
{
int len=strlen(str);
char* MyStr=new char[len+7];
strcpy(MyStr,"TestStr");
strcat(MyStr+7,str);
char* Str="";
strcpy(Str,MyStr);
delete[] MyStr;
return Str;
}
这样不会发生资源泄漏,但在strcpy时,系统会重新给原来的空串Str分配内存。

TO: pp616(傻小子) 很多情况,你不能对参数进行操作的。
Behard 2002-07-24
  • 打赏
  • 举报
回复
我觉得 pp616 的方法可行
而且在我学习 TC 时,我的老师都是这样告诉我们的
Behard 2002-07-24
  • 打赏
  • 举报
回复
我觉得 pp616 的方法可行
而且在我学习 TC 时,我的老师都是这样告诉我们的
pp616 2002-07-24
  • 打赏
  • 举报
回复
你直接最你的参数str操作。做完后直接把str的指针返回不就可以了吗?干什么要再分配内存呢???
hailulu_wang 2002-07-24
  • 打赏
  • 举报
回复
char *s;
char *t="ok";
s=function(t);
delete s;

这样是不会造成内存泄漏的,因为函数内部用临时变量比如说char *temp来分配内存,返回时将temp的指针传给s,函数将自动释放在其中定义的指针temp,而在函数中分配的内存由s负责释放:delete s;
所以这样是不会造成内存泄漏的。这个原则正是corba传递变长度参数时使用的内存管理原则。一定没问题的。
gloom 2002-07-24
  • 打赏
  • 举报
回复
我是想将它返回啊,返回后还怎么delete啊?
airspace 2002-07-24
  • 打赏
  • 举报
回复
在你使用完mystr后再delete应该可行

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧