设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
编程开发讨论区 —— LinuxSir.cn
›
C\C++
›
C和C++不同的地方
返回列表
查看:
862
|
回复:
4
C和C++不同的地方
[复制链接]
iamone
iamone
当前离线
积分
185
IP卡
狗仔卡
发表于 2004-9-21 16:40:36
|
显示全部楼层
|
阅读模式
7.3.1 修改内容
示例7-3-1中,字符数组a的容量是6个字符,其内容为hello\0。a的
内容可以改变,如a[0]= ‘X’。指针p指向常量字符串“world”(位于静态
存储区,内容为world\0),常量字符串的内容是不可以被修改的。从语法上
看,编译器并不觉得语句p[0]= ‘X’有什么不妥,但是该语句企图修改常量
字符串的内容而导致运行错误。
char a[] = “hello”;
a[0] = ‘X’;
cout << a << endl;
char *p = “world”; // 注意p指向常量字符串
p[0] = ‘X’; // 编译器不能发现该错误
cout << p << endl;
以上内容在C++中是这样的。但是对于C代码来说,以下程序完全的没有问题。
char *p = “world”;
p[0] = ‘X’;
printf("%s\n",p);
最后结果是 Xorld
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
kj501
kj501
当前离线
积分
5317
IP卡
狗仔卡
发表于 2004-9-22 20:07:29
|
显示全部楼层
但是对于C代码来说,以下程序完全的没有问题。
char *p = “world”;
p[0] = ‘X’;
printf("%s\n",p);
复制代码
楼主是从那里摘了一部分文章过来,无头无尾的,很容易被误解为“这段代码运行没有问题”,其实是说编译器不能发现这样的问题。
回复
支持
反对
使用道具
举报
显身卡
doubleelec
doubleelec
当前离线
积分
773
IP卡
狗仔卡
发表于 2004-9-23 10:48:16
|
显示全部楼层
呵呵,我还正在纳闷这样的代码怎么会没有问题
回复
支持
反对
使用道具
举报
显身卡
ak47980321
ak47980321
当前离线
积分
113
IP卡
狗仔卡
发表于 2004-9-24 07:56:58
|
显示全部楼层
我也这样想
我编译了一下,一运行它就说段错误,不过我看不出哪出.
回复
支持
反对
使用道具
举报
显身卡
JBug
JBug
当前离线
积分
358
IP卡
狗仔卡
发表于 2004-9-24 09:54:44
|
显示全部楼层
你用是gcc什么版本呀,我试了, 在C下根本就不行, “world”分配在全局的数据段中,任何修改的语句都会产生segment fault信号.代码如下:
#include <stdio.h>
int main(void)
{
char *p = "world";
p[0] = 'X';
printf("%s\n",p);
return 0;
}
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
Mandriva Linux
硬件设备 Linux 驱动
红旗 REDFLAG Linux
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表