社区
C语言
帖子详情
函数返回值是一个字符串,大家有什么好办法?
eyetiger
2002-05-20 03:17:28
函数返回值是一个字符串,大家有什么好办法?
...全文
1880
24
打赏
收藏
函数返回值是一个字符串,大家有什么好办法?
函数返回值是一个字符串,大家有什么好办法?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
晨星
2002-05-20
打赏
举报
回复
方法一:在函数内部申请字符串空间:
char* makestring()
{
char *p = new char[strlen("Hello!") + 1];
strcpy(p , "Hello!");
return p;
}
但这样做风格不太好,因为我们需要在函数外部释放函数内部动态申请的资源。
方法二:把字符串首地址传进函数,在函数内处理,不要觉得这个方法不符合你的要求,因为你的要求本身就太霸道。
void f(char *p)
{
//Process p.
……
}
如果担心越界,可以办字符串的长度也作为参数传进函数中,这样做非常安全,难道不比把字符串从函数返回好?
方法三,自定义一个字符串类,重载拷贝构造函数和赋值运算符,还有什么不能返回的?如果在VC中,MFC里已经有了,CString。
CString f()
{
CString s = "Hello!";
return s;
}
调用函数时,只需一个CString对象接受返回的内容就可以了,字符串空间的分配、释放、内容的拷贝都已经做好了,你只要放心的用就可以了,另外,CString还重载了“LPSTR”类型转换符,所以,你也可以把它当成一个一般的字符指针来用。如:
CString s = "Hello";
char s1[6];
strcpy(s1, s);
当然,这只是个例子,没有什么必要。
kof99th
2002-05-20
打赏
举报
回复
返回值是一个字符串的函数,最好还是把字符串指针当参数传过去吧,避免在函数中动态分配内存容易泄露的问题.
kof99th
2002-05-20
打赏
举报
回复
你的linestr可是常量啊,怎么可以写呢?用数组就可以了,char linestr[]="bbbb";试试看行不行.
eyetiger
2002-05-20
打赏
举报
回复
最后是return,没有0
eyetiger
2002-05-20
打赏
举报
回复
#include <iostream.h>
#include <string.h>
void st(char *p)
{
*p='w';
}
void main()
{
char* linestr="bbbb";
st(linestr);
cout<<linestr<<endl;
return 0;
}
出现内存写错误,为什么,怎么改?
superzjx2000
2002-05-20
打赏
举报
回复
加入字符串中有空格怎么办 我认为应该这样
创建一个
typedef struct {char a[...] //存字符串
int n//字符串长度
}str
在函数中new str;
返回 str
由于str在堆中申请 及时退出函数 str也不会消失
Borlandor
2002-05-20
打赏
举报
回复
char * func()
{
char * p = (char *)malloc(....);
......
return p;
}
......
{
char* s;
s = func();
...
free(s);//must free it!!!!!!
}
Januarius_
2002-05-20
打赏
举报
回复
直接返回一个string对象吧,我是了一下,好像没什么问题
#include <iostream>
#include <string>
using namespace std;
string f(const string &a) {
return a;
}
int main() {
string str("hello");
string tr;
tr = f(str);
cout<<tr<<endl;
return 0;
}
fang_jb
2002-05-20
打赏
举报
回复
那个string1属于隐含型的错误,运行时的结果不确定,
会出错也可能不会,由于返回的是local变量的地址,行为未定义。
看看linux实现的源码,我手头没有,它的实现好象不是static,
而且工作良好:)
richard_hu
2002-05-20
打赏
举报
回复
两种:第一、返回地址(指针);第二、用指针做参数
zw741027
2002-05-20
打赏
举报
回复
我一般喜欢利用参数传地址的方式的
void func(char * para)
{
}
fangrk
2002-05-20
打赏
举报
回复
把保存结果的地址作为参数列表放到函数中去,比如
char * getDigital(const char*source,char*dest)
{ char*r=dest;
while(*source){
if(*source>='0'&&*source<='9')
*(dest++)=*source;
++source;
}
*dest='\0';
return r;
}
fei1703
2002-05-20
打赏
举报
回复
char *string1="i love you!"为字符窜常量,应该是全局变量;
我觉得在里面分配方便
fang_jb
2002-05-20
打赏
举报
回复
有一些时候可以这样做
char *func()
{
static char sz[10];
...
return sz;
}
{
char tt[10];
strcpy(tt,func());
//tt = func(); 如果你在调用下一次func之后再使用tt,static变量sz值可能改变了
}
eyetiger
2002-05-20
打赏
举报
回复
wangli50(wl):
函数char *zhifu()返回后,系统不收回string1的空间吗?
这个小程序运行是正确的,可我还是不明白
eyetiger
2002-05-20
打赏
举报
回复
wangli50(wl):
函数char *zhifu()返回后char *string1,系统不收回string1的空间吗?
sbg
2002-05-20
打赏
举报
回复
可以返回一个字符指针,或函数参数中传入需要返回的字符指针
返回一个char *类型的值,指向字符串的首地址!
eyetiger
2002-05-20
打赏
举报
回复
如果我调用xuying的函数char* func()
如char *a=func();
之后要delete a ,是不是?
wangli50
2002-05-20
打赏
举报
回复
通过返回一个string的首地址就可以用了。
#include <iostream.h>
char *zhifu()
{
char *string1="i love you!";
return string1;
}
void main()
{
char *string2=zhifu();
cout<<string2;
}
huangwu007
2002-05-20
打赏
举报
回复
我觉得在函数内动态分配不是很好的办法,容易造成内存泄漏
还是在函数外分配好空间,作为参数传入比较好
当然是个人意见
加载更多回复(4)
C语言
字符串
指针,指针作为
函数
返回值
(指针
函数
),二级指针,空指针,void指针
C语言中指针还是
字符串
指针等,不仅有数组,还有
字符串
,指针
函数
php php拼接
字符串
函数
_PHP_PHP开发中常用的
字符串
操作
函数
,1,拼接
字符串
拼接
字符串
是最 - phpStudy...
PHP开发中常用的
字符串
操作
函数
1,拼接
字符串
拼接
字符串
是最常用到的
字符串
操作之一,在PHP中支持三种方式对
字符串
进行拼接操作,分别是圆点.分隔符{}操作,还有圆点等号.=来进行操作,圆点等号可以把
一个
比较长的
字符串
分解为几行进行定义,这样做是比较有好处的.2,替换
字符串
在PHP这门语言中,提供了
一个
名字叫做substr_replace()的
函数
,该
函数
的作用可以快速的完成扫描和编辑文本内容较多的...
接收
字符串
或者字符数组
返回值
的
办法
同样return返回时,如果返回
一个
值,
函数
会将该值拷贝一份以提供给主调
函数
使用,返回的是
一个
指针(也就是地址),自然拷贝的就是
一个
地址,供主调
函数
使用。这个程序的输出结果是不确定的,因为我们都知道,局部变量的生存期是就在块内部,这里也就是在
函数
retstring()的内部,在main
函数
中,name的内存空间已经被回收。C语言中的库
函数
,tmpnam()
函数
、getenv()
函数
等应该都是采用的这种方法,这也就是为什么,使用这样的
函数
的时候应该立即将返回结果拷贝一份的原因。3、 返回
一个
静态局部变量。
c语言
函数
返回
字符串
所谓
函数
类型是指
函数
返回值
的类型。在C语言中允许
一个
函数
的
返回值
是
一个
指针(即地址),这种返回指针值的
函数
称为指针型
函数
。定义指针型
函数
的一般形式为: 类型说明符 *
函数
名(形参表) { …… /*
函数
体*/ } 其中
函数
名之前加了“*”号表明这是
一个
指针型
函数
,即
返回值
是
一个
指针。类型说明符表示了返回的指针值所指向的数据类型。如:
C++
函数
中返回
字符串
的
一个
陷阱
1 #include<iostream> 2 using namespace std; 3 char * getname(void); 4 int main() 5 { 6 char * name; 7 name = getname(); 8 cout << "My name is : " << name <<...
C语言
70,040
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章