C++指针与字符串问题

fccfcc1234 2006-02-22 03:13:23
像下面的程序:

#include<iostream>

using namespace std;

int main(){
char *string = "dddddddddddddddddddddddddddddd";
char string3[10] = {'a','a','a','a','a','a','a','a','a','\0'};

cout<<string3<<endl;
cout<<string<<endl;



//*(string+5) = '\0';
*(string3+5) = '\0';


cout<<string3<<endl;
cout<<string<<endl;


return 0;
}

string和string3如果这样定义并附值是不是一样的啊。
如果定义char *string = "ddddd";编译器是不是会转化成char string[6] = {'d','d','d','d','d','\0'};再进行处理。
为什么 *(string3+5) = '\0'; 可以运行但是 *(string+5) = '\0';(被注释的那句) 却会有运行时错误.
...全文
191 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
逸学堂 2006-02-22
  • 打赏
  • 举报
回复
string和string3如果这样定义并附值是不是一样的啊。
如果定义char *string = "ddddd";编译器是不是会转化成char string[6] = {'d','d','d','d','d','\0'};再进行处理。
为什么 *(string3+5) = '\0'; 可以运行但是 *(string+5) = '\0';(被注释的那句) 却会有运行时错误.
~~~~~~~~~~
两者不一样
string的值不可以修改。
string3的值可以修改
关于这方面的讨论请参考一下
http://www.exuetang.net/article/View.aspx?NewsID=62
insanehh 2006-02-22
  • 打赏
  • 举报
回复
大家都說的狠對
redf0x_1 2006-02-22
  • 打赏
  • 举报
回复
你定义
char *string = "dddddddddddddddddddddddddddddd"
的时候实际上编译器给"dddddddddddddddddddddddddddddd"在常量区中分配了一块内存,而string指针只是指向了这块内存区域的首地址,所以*(string+5)试图修改常量区中的数据是不能通过编译的
而char string3[10] = {'a','a','a','a','a','a','a','a','a','\0'}语句首先给string[3]分配了一块内存区域,这个数组不在常量区中,然后再执行后面的赋值操作,使每个单元都为a,所以可以修改string3中的数据
fccfcc1234 2006-02-22
  • 打赏
  • 举报
回复
那两个方法的处理上是不是一样的啊。是不是把char *string = "ddddd"转换成char string[6] = {'d','d','d','d','d','\0'};再处理啊。
caucyniu 2006-02-22
  • 打赏
  • 举报
回复
dragonzxh(河马MiaMia~柯奶奶和黑爷爷的儿子叫柯南...~)
给我一样 真TM闲,
丫的就是想混分把 呵呵 。
fccfcc1234 2006-02-22
  • 打赏
  • 举报
回复
默认就是const的吗。回去还得仔细看书。
caucyniu 2006-02-22
  • 打赏
  • 举报
回复
char *string = "ddddd";
string 没有内存分配 只是指针指向字符串常量区,不可修改
char string3[10] 有那存分配 随意修改
dragonzxh 2006-02-22
  • 打赏
  • 举报
回复
char *string = "dddddddddddddddddddddddddddddd";//const char* string =.....
字符串在常量区,不能改写

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧