C语言中指向字符串常量的指针问题
char*p="hello";p[0]='x';printf("%s",p);按理说hello为字符串常量,指针无法修改它的但结果为什么是xello,还是给修改了不明白这...
char *p="hello";
p[0]='x';
printf("%s",p);
按理说hello为字符串常量,指针无法修改它的
但结果为什么是xello,还是给修改了
不明白这个
查了C语言参考手册,对这个的解释也是,指针无法修改字符串常量,但如果这么编可能会通过,可能会在运行中出错。
到底怎么回事 展开
p[0]='x';
printf("%s",p);
按理说hello为字符串常量,指针无法修改它的
但结果为什么是xello,还是给修改了
不明白这个
查了C语言参考手册,对这个的解释也是,指针无法修改字符串常量,但如果这么编可能会通过,可能会在运行中出错。
到底怎么回事 展开
5个回答
展开全部
的确字符串常量是不能修改的,但是编译器并不认为p[0]='x'有任何错误,所以它编译的时候没有问题都,连接也不会有问题,但是运行的时候一定会出错。
也就是能弹一个内存错误。
也就是能弹一个内存错误。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个:char
*p
=
"123456";
char
*s
=
"asdghh";
*s
=
*p;
你这个之所以会错,是因为指针s指向的是常量字符串
asdghh
而*s=*p相当于改变常量字符串的值,常量是不能改变的,而且常量也不能做左值,所以出错。
第二个:
char
a[]="123456";//这个的意思是
在内存充开辟空间
把常量字符串复制到这个空间
char
*p
=
a;//这个说明指针p存储的是数组变量a的地址
char
a1[]="asdghh";
//同上
char
*s
=a1;
//同上
*s
=
*p;
//
这句的意思是
把指针p所指向空间的值(这里为数组a)复制到指针s所指向的空间(这里为数组a1)
*p
=
"123456";
char
*s
=
"asdghh";
*s
=
*p;
你这个之所以会错,是因为指针s指向的是常量字符串
asdghh
而*s=*p相当于改变常量字符串的值,常量是不能改变的,而且常量也不能做左值,所以出错。
第二个:
char
a[]="123456";//这个的意思是
在内存充开辟空间
把常量字符串复制到这个空间
char
*p
=
a;//这个说明指针p存储的是数组变量a的地址
char
a1[]="asdghh";
//同上
char
*s
=a1;
//同上
*s
=
*p;
//
这句的意思是
把指针p所指向空间的值(这里为数组a)复制到指针s所指向的空间(这里为数组a1)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
注意:你这个问题是个特例,在C语言里实际上是可以修改的,且在 TC 下可以通过。如果你用VC,你将不会通过编译。
如果你不想修改它可以加个 const,如:
const char *p = "hello";
这样就不会编译通过了。
如果你不想修改它可以加个 const,如:
const char *p = "hello";
这样就不会编译通过了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你用的什么编译器?我写的?居然有这种bug!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询