社区
C语言
帖子详情
函数返回值是一个字符串,大家有什么好办法?
eyetiger
2002-05-20 03:17:28
函数返回值是一个字符串,大家有什么好办法?
...全文
1899
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)
springboot测试实例(JUnit 5 + SpringBootTest + MockMvc + H2 + Mockito).rar
springboot测试实例(JUnit 5 + SpringBootTest + MockMvc + H2 + Mockito).rar本文件为https://andyy.blog.csdn.net/article/details/160367956?spm=1011.2415.3001.5331博客所对应的源代码文件,适合新手小白入门学习
全域GEO智能推广系统 企业线上获客源码
全域GEO智能推广系统 企业线上获客源码 多平台排名优化搭建
工艺管道支架标准图集.rar
工艺管道支架标准图集.rar
单片式离合器(用于轿车、卡车等)solid edge.rar
单片式离合器(用于轿车、卡车等)solid edge.rar
FDTD方法中的完美匹配层(PML)研究(Matlab代码实现)
内容概要:本文系统梳理了多个科研领域的前沿研究与技术实现,重点涵盖FDTD方法中的完美匹配层(PML)研究,以及Matlab/Simulink在电磁、电力、控制、通信、信号处理、图像处理、路径规划、能源系统优化等领域的仿真与算法实现。文中列举了大量基于Matlab和Python的科研案例,如风电功率预测、负荷预测、无人机三维路径规划、电池系统故障诊断、雷达模拟、通信编码、微电网优化调度等,并强调结合智能优化算法(如粒子群、遗传算法、深度学习等)提升系统性能。同时,提供了丰富的代码资源与仿真模型,涵盖永磁同步电机控制、逆变器设计、多智能体任务分配、虚拟电厂调度等复杂系统,助力科研人员快速开展复现实验与创新研究。; 适合人群:具备一定编程基础,熟悉Matlab/Python工具,从事电气工程、自动化、通信、人工智能、新能源、控制科学等相关领域研究的研发人员及研究生。; 使用场景及目标:① 学习并实现FDTD仿真中的PML边界条件以有效抑制数值反射;② 掌握Matlab/Simulink在多物理场建模、控制系统设计与优化算法中的综合应用;③ 借助提供的代码资源完成科研复现、课程设计、竞赛项目或工程原型开发; 阅读建议:此资源以科研实战为导向,不仅提供理论方法,更强调代码实现与仿真验证。建议读者结合自身研究方向,按目录顺序查阅相关模块,下载配套代码进行调试与二次开发,以达到学以致用、融会贯通的目的。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章