免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10363 | 回复: 62
打印 上一主题 下一主题

求救!一个简单的问题!! [复制链接]

suyer 该用户已被删除
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2001-12-20 09:15 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
2 [报告]
发表于 2001-12-20 09:34 |只看该作者

求救!一个简单的问题!!

我也不太清楚,不过你试试下面这条语句:
return &tmpstr;
或者写成
return &tmpstr[0];
  

论坛徽章:
0
3 [报告]
发表于 2001-12-20 09:50 |只看该作者

求救!一个简单的问题!!

如果你学过编译原理的话,对这个问题就会很清楚了。
你在函数里所定义的一个变量是临时变量,如char tmpstr[255]; 它仅在函数的生存期内有效。临时变量在函数被调用的时候分配所需的存储空间,在函数返回以后,这块空间会被系统收回派其它用场,所以返回它没有任何意义。
正确的用法是:
char * getstr(){
   char* tmpstr;
   
   tmpstr=(char*) malloc(255);
   strcpy(tmpstr,"------"
   return tmpstr;
}

论坛徽章:
0
4 [报告]
发表于 2001-12-20 10:25 |只看该作者

求救!一个简单的问题!!

楼上高水平,我很佩服,多谢了!

论坛徽章:
0
5 [报告]
发表于 2001-12-20 18:48 |只看该作者

求救!一个简单的问题!!

哈哈!这个问题问得好!如果按taodale的说法,就必须在函数中回收空间了。因为在函数之外的地方是没有这个tmpstr的。
Sinbad 该用户已被删除
6 [报告]
发表于 2001-12-21 13:32 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2001-12-21 15:14 |只看该作者

求救!一个简单的问题!!

以下代码在sco下编译通过,结果正确。
#include <stdio.h>;
int main(int argc,char **argv)
{
      char *getstr();
      char teststr[255];
      strcpy(teststr,getstr());
      printf(&quot;test [%s]\n&quot;,teststr);
      exit(0);
  }
  char * getstr(){
  char tmpstr[255];
   
  strcpy(tmpstr,&quot;Hello World!&quot;
  return tmpstr;
  }
  运行显示 test [Hello World!]

论坛徽章:
0
8 [报告]
发表于 2001-12-23 13:40 |只看该作者

求救!一个简单的问题!!

include<stdio.h>;
char * getstr()
{
       char tmpstr[255];
       strcpy(tmpstr,&quot;------&quot;
       return tmpstr;
}

main()
{
printf(&quot;%s\n&quot;,getstr());
}
本程序在tc2.0下调试通过。

论坛徽章:
0
9 [报告]
发表于 2001-12-23 15:46 |只看该作者

求救!一个简单的问题!!

nice的程序有一点问题,在编译的时候会有warning: pointer to local 'tmpstr' is
an illegal value.
其实,把程序改一下,就会发现错误。
#include <stdio.h>;

char * getstr()
{
      char tmpstr[255];
      strcpy(tmpstr,&quot;------&quot;
      return tmpstr;
}
void anther()
{
char test[255];
strcpy(test,&quot;this is a test&quot;
}
int
main()
{
char *p;
p=getstr();
anther();
printf(&quot;%s\n&quot;,p);
return 0;

}
结果是this is a test.堆栈中的数据被改变了。

redwoods 该用户已被删除
10 [报告]
发表于 2001-12-24 16:48 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP