社区
工具平台和程序库
帖子详情
关于函数返回指针、字符串的问题
ccwd002
2003-04-06 09:20:32
好像很容易在这个地方出错,如内存泄漏啊等等,有没有谁能总结一下,或者说提出一个好的编程方法
...全文
117
10
打赏
收藏
关于函数返回指针、字符串的问题
好像很容易在这个地方出错,如内存泄漏啊等等,有没有谁能总结一下,或者说提出一个好的编程方法
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
husarb
2003-04-09
打赏
举报
回复
仔细看看林锐的高质量编程,里面有你想要的答案的
newhawk
2003-04-09
打赏
举报
回复
内存泄漏是个麻烦的问题,所以一般我尽可能的在栈上先分配好一块内存(定义一个字符数组即可),在作用域外编译器会自动销毁,收回内存,而慎用在堆上的内存动态分配,比如new。
还有两个问题值得注意
一个是字符串的初始化,这个很重要
还有一个是在涉及到指针时,要明白它只是一个4 bytes长的地址,用它前先要确认它指向的内存是否存在,是否合法,是否会覆盖其他的数据等
oyd
2003-04-09
打赏
举报
回复
鉴于你的问题,简单的声明为static char * ch=new char[100];
以后return ch就可以了。这样不需要回收,以后再调用函数也是用的同一块空间。
另外,用传入的指针做参数也是很好的选择,如
char * func(char * buf,int data)
{
...
return buf;
}
这样对于buf的释放就不用本函数关心,是调用者的事了
darkhawk
2003-04-07
打赏
举报
回复
建议以下方式:
1.return "ok"; 字符串ok会被编译器写入符号表中,所以,这样使用是安全的.
2.使用外部函数分配的空间.如void getvalue(char* sz, int size);其中sz是外部调用函数分配的空间.
3.使用全局变量.(建议不用)
4.在函数内部分配空间,记得在调用函数中释放.
char *getvalue()
{
return new char[100];
}
5.比4更好的方式是,传递一个动态分配的指针给函数.
void getvalue(char*& pBuff)
{
if(pBuff)
delete pBuff;
pBuff = new char [100];
}
不能使用的方法:
1.传递函数内部字符串变量(在某些情况下可能会好用,但是很危险).
char getvalue()
{
char sz[100];
return sz;
}
lplpzhuzhu
2003-04-07
打赏
举报
回复
尽量不要返回指针
但是可以使用返回参数是指针
即把要返回的指针作为一个函数的参数
这样比较安全
arya
2003-04-07
打赏
举报
回复
最简单的解决方案,不要返回指针,或者指向大对象的指针。相反,在调用函数里管理内存,然后把分配好内存的指针传递给被调用函数,由被调用函数来赋值。这是不那么优雅的做法。但是简单,高效,安全。
ccwd002
2003-04-07
打赏
举报
回复
看了高质量编程,没找到我想要的答案。
例如我想实现这样一个函数
char * Func(MyDataType data)
{
...//怎么声明字符串并返回呢?
//是用char *ch=new char(NUM)还是static char ch[NUM]还是其他方法
}
main()
{
MyDataType data;
char *p=Func(data);//可能会多次调用这个函数
cout<<p<<endl;
... //如果此后需要strcat(p,"...");会有问题吗
}
如何是好
robertnet
2003-04-06
打赏
举报
回复
就这么说也不能说出个什么道理来,还是自己多看书吧。
bugfree
2003-04-06
打赏
举报
回复
现在正是读, Effective c++ 的时候, 都完后相信你就不在迷茫, 他就像午后的一杯茶, 让你清新...
ckacka
2003-04-06
打赏
举报
回复
这个的确是个经典问题,就简单而普遍的解决办法和错误总结有本非常好的书
《高质量C++/C编程指南》- 林锐博士
这里是下载地址
http://www.vckbase.com/tools/listtools.asp?tclsid=201
你看了之后会大受裨益的!!!!
返回
函数
值-
字符串
和
指针
的
问题
本文探讨了C语言中从
函数
返回
字符串
的
问题
,通过两个示例对比了直接
返回
字符数组与
返回
指向
字符串
的
指针
的区别。前者因
函数
结束后字符数组被销毁而导致
返回
值无效,后者则能有效
返回
预期
字符串
。
函数
的
返回
类型为
指针
类型时的若干思考(
字符串
常量
问题
)
本文探讨了在C语言中,
字符串
常量、局部变量及静态局部变量在内存中的存储方式,以及它们作为
函数
返回
值时的行为差异。通过具体实例演示了不同情况下可能出现的
问题
。
老
问题
了,
函数
返回
指向常
字符串
的
指针
,形如 char *func()
本文介绍了C语言中从
函数
返回
字符串
的五种方法:直接
返回
简单
字符串
、使用全局字符数组、利用静态数组、通过malloc动态分配内存及调用者分配内存。每种方法均有其适用场景。
C语言,
返回
指针
的
函数
本文介绍了C语言中的
指针
函数
,包括如何创建
返回
指针
的
函数
,以及使用
指针
作为
函数
返回
值时的注意事项。通过案例展示了如何比较两个
字符串
的长度并
返回
较长的
字符串
,以及如何在
函数
中生成并
返回
一组随机数。同时,强调了
函数
返回
局部变量地址的限制,指出应使用static变量避免
问题
。
字符
指针
函数
的
返回
值
问题
本文探讨了字符
指针
函数
的
返回
值
问题
,解释了为何
函数
返回
值为
字符串
而非
指针
,涉及cout重载机制及如何正确输出
指针
值。
工具平台和程序库
24,851
社区成员
27,330
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章