免费注册 查看新帖 |

Chinaunix

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

[C] 【请教】函数中定义的字符指针,其所指的字符串是不是一并销毁? [复制链接]

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

论坛徽章:
0
2 [报告]
发表于 2008-05-29 09:51 |只看该作者
可以, 没问题.
下面这种是正确的:

  1. char *fun()
  2. {
  3.       char *buf = "hello";
  4.       return buf;
  5. }
复制代码


下面这种有问题:

  1. char *fun()
  2. {
  3.       char buf[10] = "hello";
  4.       return buf;
  5. }
复制代码

论坛徽章:
0
3 [报告]
发表于 2008-05-29 10:07 |只看该作者
该程序对,没有销毁
销毁的只是指针数组name而已

[ 本帖最后由 ypxing 于 2008-5-29 10:09 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-05-29 10:09 |只看该作者
我觉得没问题,
比如返回name[0], 虽然之后name[0]这个变量释放了, 但我们要的并不是这个变量的空间, 而是这个变量的值, 这个值指向的空间, 这个空间是不会释放的。
就如
char *f()
{
char * a=malloc(10);
return a;
}

论坛徽章:
0
5 [报告]
发表于 2008-05-29 10:13 |只看该作者
应该没问题,字符串常量不在栈上

论坛徽章:
0
6 [报告]
发表于 2008-05-29 10:29 |只看该作者
原帖由 broker 于 2008-5-29 09:51 发表
main( )
{     int  n ;
       char  *month_name( ) ;
       scanf("%d" , &n) ;
       printf("%d month : %s\n ", n , month_name( n)) ;
}


  char  *month_name( ) ;声明中缺少参数。
字符串常量的存储区是在全局/静态区分配的, 其生命期是和全局变量和静态变量一样的。

论坛徽章:
0
7 [报告]
发表于 2008-05-29 10:34 |只看该作者
想到一个问题,如果这个函数多次被调用,用不用每次都给这些字符串分配空间啊?
局部静态变量的定义语句仅被执行一次,所以不会重复分配空间。这个会不会呢?
经测试,没有重复分配空间。

[ 本帖最后由 zszjxh 于 2008-5-29 10:37 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2008-05-29 10:58 |只看该作者
多次调用, 串本身没有重新分配.

重新分配的是那些指针.


  1. //OK:
  2. func()
  3. {
  4. char *buf = "12345";
  5.     return buf;
  6. }

  7. //OK:
  8. func()
  9. {
  10. char *buf[] = {"12345", "abcde", 0 };

  11.     return buf[1];

  12. }


  13. //错误:
  14. func()
  15. {
  16. char buf[] = "12345";

  17.   return buf;

  18. }
  19. //错误:
  20. char *func()
  21. {
  22. char buf[][16] = {
  23.    { "12345"},
  24.    { "abcde"},
  25.    {0}
  26. };
  27.    return buf[1];
  28. }
复制代码


可以体会差别


原帖由 zszjxh 于 2008-5-29 10:29 发表


  char  *month_name( ) ;声明中缺少参数。
字符串常量的存储区是在全局/静态区分配的, 其生命期是和全局变量和静态变量一样的。

论坛徽章:
0
9 [报告]
发表于 2008-05-29 11:22 |只看该作者
谢谢!

论坛徽章:
0
10 [报告]
发表于 2008-05-29 11:24 |只看该作者
怎么给分啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP