这个C++程序(只有短短4行)无法执行,为什么?

//Pointer.cpp:Definestheentrypointfortheconsoleapplication.//指针实验#include"stdafx.h"us... // Pointer.cpp : Defines the entry point for the console application.
// 指针实验

#include "stdafx.h"
using namespace std;
int main(int argc, char* argv[])
{
char * pc = "asdf" ;
* pc = 'b'; //此行无法正确执行
* (pc+1) = 'c';
cout << pc <<endl;
system("pause");
return 0;
}

开发环境:VC++6.0 sp6

错误提示:First-chance exception in Pointer.exe: 0xC0000005: Access Violation.
这个程序是钱能C++那本书书上面的例子程序。
展开
 我来答
wolfand11
2010-04-20 · TA获得超过174个赞
知道答主
回答量:61
采纳率:0%
帮助的人:65.4万
展开全部
楼上的诸位可能没有搞清楚char *pc = "asdf";的涵义是什么吧?
请注意:char *pc = "asdf";这句代码是正确的!看下面的分析。
char *pc = "asdf";定义了一个字符指针,然后把指向字符串常量“asdf”的指针赋给pc;通过pc对它所指向的字符数组的任何改变都会造成程序的错误,因为它所指的字符数组是const字符数组,通过str对它所指向的字符数组的任何改变都是未定义的!
为了避免以上的错误,我们可以把str定义为const字符指针,
即 const char *pc = "asdf";
这样就指明不允许通过str改变它所指字符数组。

* pc = 'b'; //此行无法正确执行
这里肯定会出错阿,原因就是上面的分析。

#include "stdafx.h"
using namespace std;
int main(int argc, char* argv[])
{
char pc[] = "asdf" ;
* pc = 'b'; //此行无法正确执行
* (pc+1) = 'c';
cout << pc <<endl;
system("pause");
return 0;
}

源程序改为这样就可以了。
mfketggo
2010-04-20 · TA获得超过407个赞
知道小有建树答主
回答量:529
采纳率:0%
帮助的人:371万
展开全部
*p是指针变量,对应的必须是地址 、
你把'b'改成 &b 或者b就好啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
悉己n
2010-04-20 · TA获得超过759个赞
知道小有建树答主
回答量:684
采纳率:100%
帮助的人:570万
展开全部
楼上的你在说天书么?

这个错误是因为"asdf"是栈中的const char [],内容不能被修改。

把char * pc = "asdf" ;
改成
char * pc = new char[5] ;然后用strcpy来初始化,后面的语句就可以正常运行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
同学叫我神
2010-04-20 · TA获得超过129个赞
知道小有建树答主
回答量:230
采纳率:0%
帮助的人:0
展开全部
你* pc = 'b'; 这句打算修改常字符串了,常字符串是不能修改的
你可改动为
char str[]="asdf";
char *pc=str;
这样就可以修改*p了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
虎虎
2010-04-20 · 超过13用户采纳过TA的回答
知道答主
回答量:29
采纳率:0%
帮助的人:14.5万
展开全部
直接把*pc = 'b';,改成pc[0] = 'b';就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式