24小时热门版块排行榜    

查看: 984  |  回复: 8

seu-ljc

木虫 (正式写手)

[求助] 指针指向赋值的困惑 已有1人参与

#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int n, char* ps[])
{
        char* cherry="randy";
        *(cherry+2)="i";
        cout<<"the array is '"<<cherry<<"'"<<endl;
       
        system("pause";
        return 0;

}

以上的代码,compile 后出现如下的错误。。。
1>pp.cpp
1>e:\pp\pp\pp.cpp(8) : error C2440: '=' : cannot convert from 'const char [2]' to 'char'
1>        There is no context in which this conversion is possible
1>Build log was saved at "file://e:\pp\pp\Debug\BuildLog.htm"
1>pp - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

指针指向赋值的困惑
QQ Photo20140609212329.jpg
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

baobiao007

木虫 (职业作家)

中国特色

【答案】应助回帖

★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
seu-ljc: 金币+6, ★★★很有帮助 2014-06-20 13:39:36
用单引号将i括起来
我同意叔本华的观点,人们投身艺术和科学领域的强烈愿望之一就是逃离痛苦、残酷和枯燥无味的现实生活,逃离自己飘忽不定的七情六欲的桎梏。--爱因斯坦
2楼2014-06-20 13:25:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

seu-ljc

木虫 (正式写手)

引用回帖:
2楼: Originally posted by baobiao007 at 2014-06-20 13:25:08
用单引号将i括起来

你好,可以编译通过咯,但是运行的时候还是出现问题了·
Unhandled exception at 0x00ed2065 in pp.exe: 0xC0000005: Access violation writing location 0x00ed784e.
不知道是何原因?
3楼2014-06-20 13:39:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

seu-ljc

木虫 (正式写手)

引用回帖:
2楼: Originally posted by baobiao007 at 2014-06-20 13:25:08
用单引号将i括起来

详情请见附图~谢谢大神~
指针指向赋值的困惑-1
QQ Photo20140609212909.jpg

4楼2014-06-20 13:47:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

little虫虫

铁杆木虫 (小有名气)

0xC0000005:违规访问。
char* cherry="randy";  所定义的Cherry内存地址为只读属性
        *(cherry+2)="i"; 对只读属性的内存赋值必然会引发内存访问错误。
如果在windbg下调试已编译好的程序,用!address 0x00ed784e 命令会得到大致如下结果(手头无相关工具,只能给个不确切答案,见谅):

0:000>!address 0x00ed784e
XXXXXXXX : YYYYYYYY - 00001000  
                    Type     00020000 MEM_PRIVATE  
                    Protect  00000002 PAGE_READONLY <---注意这一项!  
                    State    00001000 MEM_COMMIT  
                    Usage    RegionUsageIsVAD
5楼2014-06-20 16:41:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

seu-ljc

木虫 (正式写手)

引用回帖:
5楼: Originally posted by little虫虫 at 2014-06-20 16:41:25
0xC0000005:违规访问。
char* cherry="randy";  所定义的Cherry内存地址为只读属性
        *(cherry+2)="i"; 对只读属性的内存赋值必然会引发内存访问错误。
如果在windbg下调试已编译好的 ...

那么想要实现这个功能要什么样的语句呢?
6楼2014-06-20 17:16:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

little虫虫

铁杆木虫 (小有名气)

引用回帖:
6楼: Originally posted by seu-ljc at 2014-06-20 17:16:33
那么想要实现这个功能要什么样的语句呢?...

改为这个试试看,
char cherry[]="randy";
* cherry+2='i';
7楼2014-06-20 17:36:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

little虫虫

铁杆木虫 (小有名气)

8楼2014-06-20 17:38:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

seu-ljc

木虫 (正式写手)

引用回帖:
7楼: Originally posted by little虫虫 at 2014-06-20 17:36:49
改为这个试试看,
char cherry[]="randy";
* cherry+2='i';...

#include <cstdio>
#include <cstdlib>
可以运行了,感谢虫虫


#include <iostream>
using namespace std;
int main(int n, char* ps[])
{
char cherry[]="randy";
*(cherry+2)='i';
        cout<<"the array is '"<<cherry<<"'"<<endl;
        
                system("pause";
        return 0;

}
9楼2014-06-24 10:46:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 seu-ljc 的主题更新
信息提示
请填处理意见