c语言中,为什么不能对字符指针变量指向的字符串再赋值?

比如说这段:char*a="hello";a[2]='c';//就是这个语句为什么不正确啊... 比如说这段:
char *a="hello";
a[2]='c'; //就是这个语句为什么不正确啊
展开
 我来答
大野瘦子
高粉答主

2019-07-05 · 繁杂信息太多,你要学会辨别
知道小有建树答主
回答量:1227
采纳率:100%
帮助的人:34.6万
展开全部

因为C语言中,凡是以""括住的形式直接出现,而且你又没有为其分配内存空间的字符串都是常量字符串,是不能修改其值的。

这样:

char a[6]="hello";

a[2]='c';

就可以了。

这里你为hello分配了一个长度为6的字符数组空间来存放。

扩展资料:

给字符数组赋值的方法

1、定义的时候直接用字符串赋值

char a[10]="hello";

注意:不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的!

2、对数组中字符逐个赋值

char a[10]={'h','e','l','l','o'};

3、利用strcpy

char a[10]; 

strcpy(a, "hello"); 

White_MouseYBZ
推荐于2017-10-13 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6663万
展开全部
这不是绝对的:当指针指向的字符串是常字符串时当然不能再赋值,因为目标是“常量”,而当指针指向的字符串不是常字符串时就可以再赋值,比如用动态申请内存方法创建的字符串。具体说就是用char *p="abcqer12345";这种方法定义字符串是不能通过指针改变内容的,原因是这个定义确定了abcqer12345是字符串常量——因为char *p="abcqer12345";被编译器解释为“创建一个字符串常量abcqer12345,并把它的首地址(就是a的地址)赋给char *型指针p”——既然是“常量”,自然就不能更改。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
忘至白葬不情必0T
推荐于2017-10-09 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
C语言中,凡是以""括住的形式直接出现,而且你又没有为其分配内存空间的字符串都是常量字符串,是不能修改其值的。

char a[6]="hello";
a[2]='c';
就可以了。这里你为hello分配了一个长度为6的字符数组空间来存放。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
种令芮德曜
2019-08-30 · TA获得超过4069个赞
知道大有可为答主
回答量:3160
采纳率:33%
帮助的人:221万
展开全部
char*
a={"hello"}为什么不能修改,这个要涉及进程占用的内存分段,大概分为代码区,只读区,全局区,堆区,栈区。"hello"作为一个字符串字面值,是被放在只读区,只读顾名思义就是不能修改的。char*
a="hello",相当于把hello的地址赋给了a,故而不能对a指向的内容进行修改。char
a[]="hello",这样赋值的就是一个字符数组。字符数组a是在栈区里申请的一个空间给a,然后把只读区的"hello"进行了一次复制再赋值给a,这样a的指向是能修改的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tianlidon
2015-09-24 · TA获得超过1219个赞
知道小有建树答主
回答量:676
采纳率:85%
帮助的人:107万
展开全部
不能修改!
char *p="hello";
相当于 const char *p="hello"
以这种方法初始化的字符串是常量字符串,而系统默认对常量赋初值后,其值无法被修改,否则会报错,所以不能修改。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式