首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

char *p 与 char p[] 的区别?解决方法

2012-03-15 
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"存放在这个数组里面,所以不是只读的!
[解决办法]
探讨
p指向了只读数据区,这句话你有什么根据呢?
==============================================
虽然标准上有这个说法, 但是并非所有的编译器都是这样。
我上面就告诉你了, intel的编译器就允许你改这个字符串。

不过如果你想写出其他编译器也能通过的代码的话, 就不要这么写了。

热点排行