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

请问一个字符串指针的有关问题

2012-09-23 
请教一个字符串指针的问题小弟最近在学习学习C语言,今天编程发现一点问题:void main(){char *pabcdefg

请教一个字符串指针的问题
小弟最近在学习学习C语言,今天编程发现一点问题:

void main()
{
char *p="abcdefg";
*p='h';
printf("%c\n",*p);
}

上面的程序正常编译,在运行时报内存错误。但是如果写成下面则可以:

void main()
{
char p[10]="abcdefg";
*p='h';
printf("%c\n",*p);
}

特请教这是什么问题?

[解决办法]
1、char *p="abcdefg"相当于p指向的是字符串常量"abcdefg",因此其内容是不能被改变的;
2、而char p[10]="abcdefg"只是为数组p赋初值而已,里面的元素是可以被改变的。
[解决办法]
1楼的答案无论在C还是C++都尚不能称为正确,主要问题在第1个答案。

在C中,字符串字面量不属于常量,或者说,在C中不存在字符串常量,但在C++中属于常量,C++才可将字符串字面量称为字符串常量。

无论在C还是C++中,对字符串字面量的修改属于未定义行为,无所谓可修改或不可修改,无论编译器是否允许修改,都没有违反标准。

热点排行