社区
C语言
帖子详情
函数返回值是一个字符串,大家有什么好办法?
eyetiger
2002-05-20 03:17:28
函数返回值是一个字符串,大家有什么好办法?
...全文
1902
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语言
函数
返回值
可以是
字符串
吗,
函数
返回值
可以是
字符串
吗
c语言中
函数
返回值
可以是数组、
字符串
和结构体吗?因为在C语言中
函数
不能返回数组,但
字符串
是存储在字符数组中的,所以能C语言中实现
函数
返回
字符串
,首先要确定
函数
返回的
字符串
地址的来源,一般分为四种方式:
函数
形参带进来的地址 静态局部变量地址 局部变量地址,必须在
函数
中用malloc()
函数
进行地址分配 采用全局变量地址 参考代码: void func1( char *s )java中
函数
的
返回值
能...
关于
字符串
比较
函数
strcmp
返回值
的问题
字符串
比较
函数
strcmp 格式: strcmp(字符数组名1,字符数组名2) 功能:按照ASCII码顺序比较两个数组中的
字符串
,并由
函数
返回值
返回比较结果。
字符串
1=
字符串
2,
返回值
=0;
字符串
2〉
字符串
2,
返回值
〉0;
字符串
1〈
字符串
2,
返回值
〈0。 本
函数
也可用于比较两个
字符串
常量,或比较数组和
字符串
常量。 ANSI标准规定,
返回值
有正数,负
scanf库
函数
的
返回值
scanf
返回值
在多种输入下以及多种格式
字符串
的情况
scanf
函数
的
返回值
1. scanf
函数
是有
返回值
的,它的
返回值
可以分成三种情况 1) 正整数,表示正确输入参数的个数。 例如执行 scanf(“%d %d”, &a, &b); 如果用户输入”3 4”,可以正确输入,返回2(正确输入了两个变量); 如果用户输入”3,4”,可以正确输入a,无法输入b,返回1(正确输入了
一个
变量)。 当scanf("%s",s)正常读取到
一个
字符串
时(不论串的长短如何),scanf()
函数
的值总是1。 2) 0,表示用户的输入不匹配,无法正确输入任何值。如上例,用户如果
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章