免费注册 查看新帖 |

Chinaunix

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

一个简单的const的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-20 16:54 |只看该作者 |倒序浏览
请看代码:
const char*
sv_check_permissions (int client)
{
const char* p;
sceKernelDelayThread (10000);
if (client == 123)
p = "yes";
else
p = "no";
return p;
}

这样写是安全的么? yes 和 no 存储在 正文段中么? 因为const 所以 yes 和 no 就存储在正文段中么?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2007-04-20 17:00 |只看该作者
return 的是 const char *,因此这么做没问题。

论坛徽章:
0
3 [报告]
发表于 2007-04-20 17:06 |只看该作者
那么存储 yes和no的内存是在正文段中咯?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2007-04-20 17:18 |只看该作者
原帖由 picobsd 于 2007-4-20 17:06 发表
那么存储 yes和no的内存是在正文段中咯?

我很好奇,你为什么要问这个?

论坛徽章:
0
5 [报告]
发表于 2007-04-20 17:28 |只看该作者
原帖由 picobsd 于 2007-4-20 17:06 发表
那么存储 yes和no的内存是在正文段中咯?


至少在c中,const不是安全的。它仅仅表示被修饰的符号只读而已。被const修饰的变量不改变本来的位置,局部变量就在栈上,全局变量就在全局区。
你可以试着用在栈上定义一个const变量,然后再定义一个数组,通过数组指针越界去覆盖他它。所以const在c中不是安全的。

c++中我就不知道了。

论坛徽章:
0
6 [报告]
发表于 2007-04-20 17:29 |只看该作者
原帖由 picobsd 于 2007-4-20 16:54 发表
请看代码:
const char*
sv_check_permissions (int client)
{
const char* p;
sceKernelDelayThread (10000);
if (client == 123)
p = "yes";
else
p = "no";
return p; ...


另外我很奇怪的是,你这个程序能正常运行吗?

论坛徽章:
0
7 [报告]
发表于 2007-04-20 17:41 |只看该作者
@@

汗。。。看到一个不懂的词,请教一下,什么叫“正文段”?

论坛徽章:
0
8 [报告]
发表于 2007-04-20 17:44 |只看该作者
原帖由 Neil 于 2007-4-20 17:41 发表
@@

汗。。。看到一个不懂的词,请教一下,什么叫“正文段”?


应该就是.text段
据我所知,除了某些编译器会把字符串常量放到.text段中外,其它的数据都不会放这里。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2007-04-20 17:52 |只看该作者
原帖由 zx_wing 于 2007-4-20 17:29 发表

另外我很奇怪的是,你这个程序能正常运行吗?

可以啊。难道我看错了?

论坛徽章:
0
10 [报告]
发表于 2007-04-20 17:54 |只看该作者
原帖由 flw 于 2007-4-20 17:52 发表

可以啊。难道我看错了?


它这里首先是没有给指针p分配内存,其次p="abc"这种赋值方式是c++支持的吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP