char *p 与 char p[] 的区别?解决方法
char *p 与 char p[] 的区别??C/C++ code#include stdio.h#include stdio.hvoid main(){char *p ab
char *p 与 char p[] 的区别??
C/C++ code#include <stdio.h>#include <stdio.h>void main(){ char *p = "abcd"; //??程序在运行到 *(p+1) = 'a'; 时候出现内存读写错误。 char p[] = "abcd"; //换成这种写法,程序可以正常运行。 printf("*(p+1) = %c\n", *(p+1)); *(p+1) = 'a'; printf("*(p+1) = %c\n", *(p+1)); return;}//等待高手解答疑问????谢谢
[解决办法]char *p = "abcd";错误的写法
正确的是
const char *p = "abcd";
[解决办法]char *p = "abcd";
p指向了只读数据区,该区域无法修改
所以*(p+1) = 'a';就是非法操作
以上论断的前提是程序运行在保护模式下,如果在实模式下,程序仍然可以运行
楼主可以学习下变量的存储空间的分类!
[解决办法]"abcd"是常量
[解决办法]又是这个问题呀, 其实用intel的编译器就没有这种问题了。
[解决办法]char p[] = "abcd"; 是栈上的变量可以被修改。
[解决办法]p指向了只读数据区,这句话你有什么根据呢?
==============================================
虽然标准上有这个说法, 但是并非所有的编译器都是这样。
我上面就告诉你了, intel的编译器就允许你改这个字符串。
不过如果你想写出其他编译器也能通过的代码的话, 就不要这么写了。
[解决办法]"abcd"是字符常量,p指向它,当然是指向只读数据区!
而对于char p[] = "abcd";p是在栈上开辟的数组,"abcd"存放在这个数组里面,所以不是只读的!
[解决办法]