社区
C语言
帖子详情
函数返回值是一个字符串,大家有什么好办法?
eyetiger
2002-05-20 03:17:28
函数返回值是一个字符串,大家有什么好办法?
...全文
1859
24
打赏
收藏
函数返回值是一个字符串,大家有什么好办法?
函数返回值是一个字符串,大家有什么好办法?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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()的
函数
,该
函数
的作用可以快速的完成扫描和编辑文本内容较多的...
c语言
函数
返回
字符串
所谓
函数
类型是指
函数
返回值
的类型。在C语言中允许
一个
函数
的
返回值
是
一个
指针(即地址),这种返回指针值的
函数
称为指针型
函数
。定义指针型
函数
的一般形式为: 类型说明符 *
函数
名(形参表) { …… /*
函数
体*/ } 其中
函数
名之前加了“*”号表明这是
一个
指针型
函数
,即
返回值
是
一个
指针。类型说明符表示了返回的指针值所指向的数据类型。如:
接收
字符串
或者字符数组
返回值
的
办法
同样return返回时,如果返回
一个
值,
函数
会将该值拷贝一份以提供给主调
函数
使用,返回的是
一个
指针(也就是地址),自然拷贝的就是
一个
地址,供主调
函数
使用。这个程序的输出结果是不确定的,因为我们都知道,局部变量的生存期是就在块内部,这里也就是在
函数
retstring()的内部,在main
函数
中,name的内存空间已经被回收。C语言中的库
函数
,tmpnam()
函数
、getenv()
函数
等应该都是采用的这种方法,这也就是为什么,使用这样的
函数
的时候应该立即将返回结果拷贝一份的原因。3、 返回
一个
静态局部变量。
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,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章