如何返回结果?

vb6andvc6 2009-11-16 10:41:29
char *myStr()
{
char i=97;
char j=98;

char sz[3];
sz[0] = i;
sz[1] = j;
sz[2] = 0;
printf("%s\n",sz);//结果正确
return sz;//不能返回结果,为什么呢?
}
...全文
119 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
keyhzn 2009-11-16
  • 打赏
  • 举报
回复
char *myStr()
{
char i=97;
char j=98;

char *sz;
sz= (char *)malloc(3);
sz[0] = i;
sz[1] = j;
sz[2] = 0;
printf("%s\n",sz);//结果正确
return sz;//不能返回结果,为什么呢?
}

int main(int argc, char* argv[])
{
char * at=0;
at = myStr();
printf("%s", at);
free(at);
return 0;
}

在堆创建就没问题了
vb6andvc6 2009-11-16
  • 打赏
  • 举报
回复
看来是道行不够。。
先用2#的方法吧。

phpjspasp 2009-11-16
  • 打赏
  • 举报
回复


struct array{
char a[3];
};
struct array myStr()
{
char i=97;
char j=98;

struct array sz;
sz.a[0] = i;
sz.a[1] = j;
sz.a[2] = 0;
printf("%s\n",sz.a);
return sz;
}


返回一个结构,结构里是个数组。返回结构,是值拷贝的。
selooloo 2009-11-16
  • 打赏
  • 举报
回复
static char sz[3];就 OK了
hai040 2009-11-16
  • 打赏
  • 举报
回复
1L不是还说了heap吗
malloc/free
最好有个专门的函数去调用free
并在函数名上体现有申请释放内存
vb6andvc6 2009-11-16
  • 打赏
  • 举报
回复
难道遇到要定义返回字串值的function时,就必须生明一个全局的临时变量给它们公用吗?

char t[255];
hai040 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 vb6andvc6 的回复:]
2#的方法已想到。
没有其他方法了吗?

[/Quote]
1L
jackyhubin 2009-11-16
  • 打赏
  • 举报
回复
你的目的是什么,如果是要用数组来做一些事情,请先传递内存地址进去所谓指针,通过引用修改内容,回传地址出来。
C的单向值传递,任何时候都要记住。
zhengjiankang 2009-11-16
  • 打赏
  • 举报
回复
还有一个方法就是动态申请内存空间
那样的话在函数里面申请的内存空间就无法释放
jackyhubin 2009-11-16
  • 打赏
  • 举报
回复
为何要这样做?
zhengjiankang 2009-11-16
  • 打赏
  • 举报
回复
sz为局部字符数组
在函数结束的时候sz的生命周期结束
系统自动销毁sz内存

可以以字符数组的引用为参数,返回引用
bean11222 2009-11-16
  • 打赏
  • 举报
回复
函数在执行的时候 局部变量全被撤消了~~关注高人的方法..
jackyjkchen 2009-11-16
  • 打赏
  • 举报
回复
返回栈内存,会出垃圾。
vb6andvc6 2009-11-16
  • 打赏
  • 举报
回复
2#的方法已想到。
没有其他方法了吗?
hai040 2009-11-16
  • 打赏
  • 举报
回复
void myStr(char* str)
{
...
strcpy(str, sz);
}
TianYiXiang 2009-11-16
  • 打赏
  • 举报
回复
用全局或者heap!

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧