免费注册 查看新帖 |

Chinaunix

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

关于字符串 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-14 16:21 |只看该作者 |倒序浏览
在c++中(vc环境)
void main(void)
{
char *p="show";  //"show"是常量.不能修改.
*p='a';                 //编译的时候没错,运行就出错了.
cout<<p<<endl;
}

在c中(tc环境)

void main()
{
   char *p="show";
   *p='a';
    printf("%s",p);
}
运行结果是"ahow";在c中"show"不是常量吗?

论坛徽章:
0
2 [报告]
发表于 2004-04-14 16:43 |只看该作者

关于字符串

字符串常量能不能修改,这要看编译器是怎么规定的。过去的一些老编译器(如你遇到的 TC)允许修改字符常量,但是现在的编译器的默认设定是不允许修改。vc不清楚,gcc编译器的话编译时加 -fwritable-strings 选项可以使你提供的程序正常运行。

论坛徽章:
0
3 [报告]
发表于 2004-04-14 16:57 |只看该作者

关于字符串

char * const p = "show"
这样的p指向的内容才是不可修改的。

楼主需要分清楚:
char const *p
const char * p
char * const p

论坛徽章:
0
4 [报告]
发表于 2004-04-14 18:00 |只看该作者

关于字符串

谢谢whyglinux

论坛徽章:
0
5 [报告]
发表于 2004-04-14 19:33 |只看该作者

关于字符串

原帖由 "zjBahamout" 发表:
char * const p = "show"
这样的p指向的内容才是不可修改的。

楼主需要分清楚:
char const *p
const char * p
char * const p



char * const p 仅仅意味着不能直接通过 p 来修改其指向的对象,不是说其指向的对象不变。

比如
char *strcpy(char *s1, const char *s2);

我们可以把一个可写的字符数组的名字放到 s2

实际上 const 也只是一个建议,并不是强制性的。楼主的那个字符串是由编译器和操作系统保证不可写的。

论坛徽章:
0
6 [报告]
发表于 2004-04-14 19:50 |只看该作者

关于字符串

那是当然的了。

总会有方法绕过语法达到自己的目的,如同大家都可以通过指针直接访问类的私有成员,甚至改变类的虚函数的调用入口一样,但是问题在于有必要么??定义char *const p 就是在做接口函数的时候告诉别人不可更改p所指向的区域。

楼上的有点钻牛角尖了吧。

论坛徽章:
0
7 [报告]
发表于 2004-04-14 19:57 |只看该作者

关于字符串

[quote]原帖由 "zjBahamout"]定义char *const p 就是在做接口函数的时候告诉别人不可更改p所指向的区域[/quote 发表:


不是吧?


函数接口中的 char *const p ,只是向调用者许诺,该函数不会修改那个字符串而已。并不是说调用者不能修改该字符串。我觉得你理解反了。

论坛徽章:
0
8 [报告]
发表于 2004-04-14 20:16 |只看该作者

关于字符串

嗯,不对

void interface(char * const p);

当我调用这个接口的时候,interface(p), 应该是我希望告诉实现interface函数的人不要更改p指向的区域。

论坛徽章:
0
9 [报告]
发表于 2004-04-14 21:00 |只看该作者

关于字符串

楼上两位把char * const p 的含义都搞错了。正确的说法是:指针 p 是 const 的,不能改变,而 p 指向的字符串是可以通过 p 修改的,如 *p = 'a' 这样的操作是合法的。

char const *p 和 const char * p是等同的,意思是 p 指向的字符串不能通过 p 来修改,但是指针 p 的值是可以改变的,即可以再次指向另外一个字符串,但是不能用 p 来修改,即 *p = 'a' 这样的操作是非法的。

从 zjBahamout  的回答来看,恐怕zjBahamout 还没有正确把握楼主提出问题的真正含义,也就是说还没有意识到“字符串常量”是怎么回事,其实与 const 修饰符不是一回事,提请注意。

论坛徽章:
0
10 [报告]
发表于 2004-04-14 21:08 |只看该作者

关于字符串

郁闷!
竟然犯了基本错误,令大家笑话了。怪不得自己看的都别扭。

谢谢whyglinux。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP