为什么说可能会导致内存访问异常
为什么说可能会导致内存访问错误
char *p1="sdkfsdsdg";
p1[0]='g';
------解决思路----------------------
内存是有属性的,读写,只读什么的。字符串常量保存的地方一般是只读,你往那写自然会引起段错误,内存是有保护机制的。
------解决思路----------------------
C语言是表达能力很强的语言,为什么写得这么傻?干嘛不这么写:
问题在于,不管怎么写,串字面值都被用于初始化一个静态数组,它可能位于一个受处理器硬件保护的只读页内。
------解决思路----------------------
指针p1指向的是一个常量字符串。你无法修改常量字符串的值。
若想修改,建议写如下代码:
这样会给p1在栈上分配内存,从而你可以修改其中的值。
------解决思路----------------------
"sdkfsdsdg"是字符串常量,在内存中的代码段,是不允许修改的,P[0]='g'是要改变‘S’,这样运行会产生段错误,
char *p1="sdkfsdsdg";
p1[0]='g';
------解决思路----------------------
内存是有属性的,读写,只读什么的。字符串常量保存的地方一般是只读,你往那写自然会引起段错误,内存是有保护机制的。
------解决思路----------------------
char *p1="sdkfsdsdg";
p1[0]='g';
C语言是表达能力很强的语言,为什么写得这么傻?干嘛不这么写:
"sdkfsdsdg" [0] = 'g';
问题在于,不管怎么写,串字面值都被用于初始化一个静态数组,它可能位于一个受处理器硬件保护的只读页内。
------解决思路----------------------
指针p1指向的是一个常量字符串。你无法修改常量字符串的值。
若想修改,建议写如下代码:
char p1[]="sdkfsdsdg";
p1[0]='g';
这样会给p1在栈上分配内存,从而你可以修改其中的值。
------解决思路----------------------
"sdkfsdsdg"是字符串常量,在内存中的代码段,是不允许修改的,P[0]='g'是要改变‘S’,这样运行会产生段错误,